框架程序基础

框架程序的状态信息

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

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

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

模块 - 线程状态: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:负责每个程序只做一次的动作。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章