MFC事件和線程


HANDLE WINAPI CreateThread
( 
  __in_opt   LPSECURITY_ATTRIBUTES lpThreadAttributes, // 指向SECURITY_ATTRIBUTES 的指針,為新線程指定安全描述 
  __in       SIZE_T dwStackSize, // 初始化線程堆棧尺寸 
  __in       LPTHREAD_START_ROUTINE lpStartAddress, //線程函數所指向的地址起始函數   
__in_opt   LPVOID lpParameter, // 給線程函數傳遞的參數   
__in       DWORD dwCreationFlags, // 有關線程的標志  
 __out_opt  LPDWORD lpThreadId //系統分配給線程的ID

 );
----第一個參數是安全屬性,一般設為null,使用缺省的安全屬性。當我們想此線程有另外的子進程時,可改變它的屬性。 
----第二個參數是線程堆棧尺寸,一般設為0,表示與此應用的堆棧尺寸相同,即主線程與創建的線程一樣長度的堆棧。並且其長度會根據需要自動變長。 
----第三個參數,也是最重要的一個,是一個指向函數名的指針,或者函數名字 
----第四個參數是你需要向線程函數傳遞的參數,一般是一個指向結構的指針。不需傳遞參數時,則這個參數設為null。 
----第五個參數,傳入與線程有關的一些標志,如果是CREATE_SUSPENDED,則創建一個掛起的線程,即這個線程本身已創建,它的堆棧也已創建。
  但這個線程不會被分配給CPU時間,只有當ResumeThread函數被調用后才能執行;當然,也可以調用SuspendThread函數再次掛起線程。要是標志為0,那么一旦建立線程,線程函數就被立即調用。一般傳為0即可。 
----第六個參數是系統分配給這個線程的唯一的ID標志 

事件對象就像一個開關:它只有兩種狀態---開和關。當一個事件處於”開”狀態,我們稱其為”有信號”否則稱為”無信號”。可以在一個線程的執行函數中創建一個事件對象,然后觀察它的狀態,如果是”無信號”就讓該線程睡眠,這樣該線程占用的CPU時間就比較少。

產生事件對象的函數如下:  

HANDLE     CreateEvent(

        LPSECURITY_ATTRIBUTES     lpEventAttributes,     //     SD   
        BOOL     bManualReset,                                                 //     reset     type   
        BOOL     bInitialState,                                                      //     initial     state   
        LPCTSTR     lpName                                                       //     object     name   
    );   
    該函數創建一個Event同步對象,如果CreateEvent調用成功的話,會返回新生成的對象的句柄,否則返回NULL。

參數說明:
    lpEventAttributes     一般為NULL   


    bManualReset               創建的Event是自動復位還是人工復位.如果true,人工復位,   一旦該Event被設置為有信號,則它一直會等到ResetEvent()API被調用時才會恢復 為無信號.     如果為false,Event被設置為有信號,則當有一個wait到它的Thread時,  該Event就會自動復位,變成無信號.   如果想 在每次調用WaitForSingleObject 后讓WINDOWS為您自動地把事件地狀態恢復為”無信號”狀態,必須把該參數設為FALSE,否則,您必須每次調用ResetEvent函數來清除事件 的信號。


    bInitialState             初始狀態,true,有信號,false無信號   
    lpName                  事件對象的名稱。您在OpenEvent函數中可能使用。

 

 

通過WaitForSingleObject或者GetOverlappedResult來判斷事件,從而控制線程。


免責聲明!

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



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