1. 程式人生 > >MFC中建立和使用執行緒的方法

MFC中建立和使用執行緒的方法

有關建立執行緒的問題有三種方法: 1.C語言函式,呼叫_beginthread(); 2.API函式,呼叫CreateThread(); 3.MFC函式,呼叫AfxBeginThread(); 推薦使用MFC函式AfxBeginThread();

利用MFC裡的AfxBeginThread函式能很方便地建立執行緒以及對執行緒進行等待、喚醒等操作。

1、函式原型

CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc , LPVOID pParam , int nPriority = THREAD_PRIORITY_NORMAL , UINT nStackSize = 0 , DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

2、引數說明

(1)返回值:一個指向新執行緒的執行緒物件。

(2)pfnThreadProc:執行緒的入口函式,宣告一定要如下:UINT MyThreadFunction( LPVOID pParam );

(3)pParam:傳遞入執行緒的引數,注意它的型別為:LPVOID,所以我們可以傳遞一個結構體入執行緒。

(4)nPriority:執行緒的優先順序,一般設定為 0。讓它和主執行緒具有共同的優先順序。

(5)nStackSize:指定新建立的執行緒的棧的大小。如果為 0,新建立的執行緒具有和主執行緒一樣的大小的棧。

(6)dwCreateFlags:指定建立執行緒以後,執行緒有怎麼樣的標誌。可以指定兩個值:

     <1>CREATE_SUSPENDED:執行緒建立以後,會處於掛起狀態,直到呼叫ResumeThread;

     <2>0:建立執行緒後就開始執行。

(7)lpSecurityAttrs:指向一個 SECURITY_ATTRIBUTES 的結構體,用它來標誌新建立執行緒的安全性。如果為 NULL,那麼新建立的執行緒就具有和主執行緒一樣的安全性。

3、執行緒建立

一般建立過程如下:

先定義一個工作函式,一般來說你的執行緒就是依照該函式的功能執行任務:

UINT MyThreadFunction( LPVOID pParam )

{

 //函式體

 return 0;

}

然後可以按以下方式建立執行緒:

CWinThread* MyThread=AfxBeginThread(MyThreadFunction , pParam , THREAD_PRIORITY_NORMAL , 0 , 0 , NULL);

4、執行緒的等待與喚醒

(1)讓執行緒等待(暫時掛起):

MyThread->SuspendThread();

(2)喚醒暫停的執行緒:

MyThread->ResumeThread();

5、檢視執行緒狀態:

DWORD code;

GetExitCodeThread(MyThread->m_hThread , &code);

if(code==STILL_ACTIVE){//執行緒仍在執行}

else {//執行緒停止執行}

6、結束執行緒

TerminateThread(MyThread->m_hThread , 0);