框架程序基础

框架程序的状态信息

对于应用程序来说,有许多的状态需要维护:如模块状态、线程状态等。

模块的概念:每一个被加载到内存中的文件成为一个模块。一般进程是由多个模块组成的,通常应用程序都是通过模块句柄来访问进

程中的模块。事实上,模块的句柄的值就是该模块映射到进程中的地址。

模块 - 线程状态:AFX_MODULE_THREAD_STATE

模块状态: AFX_MODULE_STATE

线程状态:_AFX_THREAD_STATE

维护模块的状态是为了在程序运行过程中方便查询,所以每当模块被加载到内存,执行初始化代码的时候,就应当为这个模块申请一

AFX_MODULE_STATE对象,并设置其成员值。为了保存正在执行的模块的AFX_MODULE_STATE指针,我们要再定义线程状态

_AFX_THREAD_STATE,用于保存线程的状态信息。

同样,每创建一个线程就创建一个新的 _AFX_THREAD_STATE对象。

框架程序的执行顺序

线程经历的状态:

1. Initialize Instance : 执行线程实例的初始化工作

2. Running: 进入消息循环

3. Exit Instance: 线程终止时执行清除

Initialize Instance、Run和 Exit Instance函数是由框架程序负责调用的,用户如果想添加额外的代码只需重载它们就可以了。

线程刚看时被创建时,必须做一些初始化工作,为的是产生应用程序的工作平台----窗口。这项工作是每个线程实例都必须做的,所以

称之为Initialize Instance。

程序的初始化过程:

在使用框架程序之前,用户必须首先创建应用程序实例,这个应用程序实例用来初始化整个类库框架,也用来维护一些全局变量信息。我们用一个CWinAPP类来描述它。

注意:此框架规定,个应用程序必须有一个全局的CWinApp对象,这样CWinApp类的构造函数就会在WinMain函数执行之前被调

用。CWinApp的构造函数除了初始化CWinApp对象之外,还初始化了主线程的线程状态和当前模块的模块状态。

一个很关键的函数:

BOOL AfxWinInit(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow);它负责类库框架的内部

初始化

使用类库框架之后,不需要再与WinMain函数见面了,只需从CWinApp类派生自己的应用程序类,重载InitApplication 或者

InitInstance函数。如果想让程序进入消息循环,就令InitInstance函数返回TRUE,否则返回FALSE

InitInstance:负责每个线程只做一次的动作,

InitApplication:负责每个程序只做一次的动作。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值