程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> MFC事件和線程,MFC事件線程

MFC事件和線程,MFC事件線程

編輯:C++入門知識

MFC事件和線程,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來判斷事件,從而控制線程。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved