1. 程式人生 > >win32 API 執行緒程式設計

win32 API 執行緒程式設計

DWORD WaitForMultipleObject(

DWORD dwCount ,

CONST HANDLE* phObject, 

BOOL fWaitAll, 

DWORD dwMillisecinds);

------------------------------Win32 API 執行緒相關函式---------------------------------------------------------------
Win32 提供了一系列的API函式來完成執行緒的建立、掛起、恢復、終結以及通訊等工作。下面將選取其中的一些重要函式進行說明。 
(1) HANDLE CreateThread(
    LPSECURITY_ATTRIBUTES lpThreadAttributes,//指向一個 SECURITY_ATTRIBUTES 結構的指標,該結構決定了執行緒的安全屬性,一般置為 NULL;
        DWORD dwStackSize,  //指定了執行緒的堆疊深度,一般都設定為0;
        LPTHREAD_START_ROUTINE lpStartAddress,//表示新執行緒開始執行時程式碼所在函式的地址,即執行緒的起始地址。
                                                       //一般情況為(LPTHREAD_START_ROUTINE)ThreadFunc,ThreadFunc 是執行緒函式名;
        LPVOID lpParameter,//指定了執行緒執行時傳送給執行緒的32位引數,即執行緒函式的引數;
        DWORD dwCreationFlags,//控制執行緒建立的附加標誌,可以取兩種值。如果該引數為0,執行緒在被建立後就會立即開始執行;
                                       //如果該引數為CREATE_SUSPENDED,則系統產生執行緒後,該執行緒處於掛起狀態,並不馬上執行,直至函式ResumeThread被呼叫;
        LPDWORD lpThreadId //該引數返回所建立執行緒的ID;
);
         該函式在其呼叫程序的程序空間裡建立一個新的執行緒,並返回已建執行緒的控制代碼。
(2) DWORD SuspendThread(HANDLE hThread); 

該函式用於掛起指定的執行緒,如果函式執行成功,則執行緒的執行被終止。
(3) DWORD ResumeThread(HANDLE hThread);
該函式用於結束執行緒的掛起狀態,執行執行緒。 
(4) VOID ExitThread(DWORD dwExitCode);
 該函式用於執行緒終結自身的執行,主要線上程的執行函式中被呼叫。其中引數dwExitCode用來設定執行緒的退出碼。 
(5) BOOL TerminateThread(
            	HANDLE hThread,//將被終結的執行緒的控制代碼;
            	DWORD dwExitCode //用於指定執行緒的退出碼。
            );
一般情況下,執行緒執行結束之後,執行緒函式正常返回,但是應用程式可以呼叫TerminateThread強行終止某一執行緒的執行。
使用TerminateThread()終止某個執行緒的執行是不安全的,可能會引起系統不穩定;雖然該函式立即終止執行緒的執行,但並不釋放執行緒所佔用的資源。因此,一般不建議使用該函式。 
(6)BOOL PostThreadMessage(
           	DWORD idThread,//將接收訊息的執行緒的ID;
           	UINT Msg,//指定用來發送的訊息;
           	WPARAM wParam,//同訊息有關的字引數
           	LPARAM lParam//同訊息有關的長引數;
           );
該函式將一條訊息放入到指定執行緒的訊息佇列中,並且不等到訊息被該執行緒處理時便返回。
呼叫該函式時,如果即將接收訊息的執行緒沒有建立訊息迴圈,則該函式執行失敗。