用戶界面線程實現的技巧
1.問題闡述
MFC中有兩類線程,分別稱為工作者線程和用戶界面線程。二者的主要區別在於工作者線程沒有消息循環,而用戶界面線程有自己的消息隊列和消息循環。
工作者線程沒有消息機制,通常用來執行后台計算和維護任務,如冗長的計算過程,打印機的后台打印等。用戶界面線程一般用於處理獨立於其他線程執行之外的用戶輸入,響應用戶及系統所產生的事件和消息等。但對於Win32的API編程而言,這兩種線程是沒有區別的,它們都只需線程的啟動地址即可啟動線程來執行任務。
2.實現技巧
當一個Windows應用程序運行時,它會自動產生一個主線程,一般的窗口處理等都由該主線程處理,在主線程中可以創建和使用其他線程。用戶界面線程通常用於處理用戶輸入並響應各種事件和消息。
啟用用戶界面線程的函數AfxBeginThread()與啟用工作線程的函數是同一個函數的不同重載形式,該函數的聲明如下:
CWinThread* AfxBeginThread( |
pParam:傳遞給線程函數的一個32位參數,執行函數將用某種方式解釋該值。它可以是數值,或指向一個結構的指針,甚至可以被忽略。
nPriority:線程的優先級。如果為0,則線程與其父線程具有相同的優先級。
nStackSize:線程為自己分配堆棧的大小,其單位為字節。如果nStackSize被設為0,則線程的堆棧被設置成與父線程堆棧大小相同。
dwCreateFlags:如果為0,則線程在創建后立刻開始執行;如果為CREATE_ SUSPEND,則線程在創建后立刻被掛起。
lpSecurityAttrs:線程的安全屬性指針,一般為NULL。
3.實例代碼
BOOL CMyThread::InitInstance() |
4.小結
在Visual C++ 6.0編程環境中,我們既可以編寫C風格的32位Win32應用程序,也可以利用MFC類庫編寫C++風格的應用程序,二者各有其優缺點。基於Win32的應用程序執行代碼小巧,運行效率高,但要求程序員編寫的代碼較多,且需要管理系統提供給程序所有資源;而基於MFC類庫的應用程序可以快速建立起應用程序,類庫為程序員提供了大量的封裝類,而且Developer Studio為程序員提供了一些工具來管理用戶源程序,其缺點是類庫代碼很龐大。由於使用類庫所帶來的快速、簡捷和功能強大等優越性,因此除非有特殊的需要,否則Visual C++推薦使用MFC類庫進行程序開發。
http://blog.csdn.net/lizheng308/article/details/6195438
