用戶界面線程實現


用戶界面線程實現的技巧

1.問題闡述

MFC中有兩類線程,分別稱為工作者線程和用戶界面線程。二者的主要區別在於工作者線程沒有消息循環,而用戶界面線程有自己的消息隊列和消息循環。

工作者線程沒有消息機制,通常用來執行后台計算和維護任務,如冗長的計算過程,打印機的后台打印等。用戶界面線程一般用於處理獨立於其他線程執行之外的用戶輸入,響應用戶及系統所產生的事件和消息等。但對於Win32的API編程而言,這兩種線程是沒有區別的,它們都只需線程的啟動地址即可啟動線程來執行任務。

2.實現技巧

當一個Windows應用程序運行時,它會自動產生一個主線程,一般的窗口處理等都由該主線程處理,在主線程中可以創建和使用其他線程。用戶界面線程通常用於處理用戶輸入並響應各種事件和消息。

啟用用戶界面線程的函數AfxBeginThread()與啟用工作線程的函數是同一個函數的不同重載形式,該函數的聲明如下:

 CWinThread* AfxBeginThread(
CRuntimeClass* pThreadClass,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);

pParam:傳遞給線程函數的一個32位參數,執行函數將用某種方式解釋該值。它可以是數值,或指向一個結構的指針,甚至可以被忽略。 
 
nPriority:線程的優先級。如果為0,則線程與其父線程具有相同的優先級。 
 
nStackSize:線程為自己分配堆棧的大小,其單位為字節。如果nStackSize被設為0,則線程的堆棧被設置成與父線程堆棧大小相同。 
 
dwCreateFlags:如果為0,則線程在創建后立刻開始執行;如果為CREATE_ SUSPEND,則線程在創建后立刻被掛起。 
 
lpSecurityAttrs:線程的安全屬性指針,一般為NULL。

3.實例代碼

BOOL CMyThread::InitInstance()
{
GetMainWnd()->SetWindowText("從線程中設置標題欄文字");
return TRUE;
}
// CTestView 消息處理程序
#include"MyThread.h"
void CTestView::OnRButtonDown(UINT nFlags, CPoint point)

CMyThread *pThread;
pThread=(CMyThread*)AfxBeginThread(RUNTIME_CLASS(CMyThread));
CView::OnRButtonDown(nFlags, point);
}

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM