框架程序基礎

框架程序的狀態信息

對於應用程序來說,有許多的狀態需要維護:如模塊狀態、線程狀態等。

模塊的概念:每一個被加載到內存中的文件成爲一個模塊。一般進程是由多個模塊組成的,通常應用程序都是通過模塊句柄來訪問進

程中的模塊。事實上,模塊的句柄的值就是該模塊映射到進程中的地址。

模塊 - 線程狀態: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:負責每個程序只做一次的動作。

 

 

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