天天看點

CreateEvent 、PulseEvent的用法

HANDLE     CreateEvent(  

        LPSECURITY_ATTRIBUTES     lpEventAttributes,     //     SD  

        BOOL    bManualReset,                                                 //     reset     type  

        BOOL     bInitialState,                                               //     initial     state  

        LPCTSTR     lpName                                                         //     object     name  

    );  

    該函數建立一個Event同步對象,并傳回該對象的Handle   

    lpEventAttributes     一般為NULL  

    bManualReset               建立的Event是自動複位還是人工複位     ,如果true,人工複位,   

    一旦該Event被設定為有信号,則它一直會等到ResetEvent()API被調用時才會恢複  

    為無信号.     如果為false,Event被設定為有信号,則當有一個wait到它的Thread時,   

    該Event就會自動複位,變成無信号.  

    bInitialState             初始狀态,true,有信号,false無信号  

    lpName                           Event對象名  

一個Event被建立以後,可以用OpenEvent()API來獲得它的Handle,用CloseHandle()  

來關閉它,用SetEvent()或PulseEvent()來設定它使其有信号,用ResetEvent()  

來使其無信号,用WaitForSingleObject()或WaitForMultipleObjects()來等待  

其變為有信号.  

PulseEvent()是一個比較有意思的使用方法,正如這個API的名字,它使一個Event  

對象的狀态發生一次脈沖變化,從無信号變成有信号再變成無信号,而整個操作是原子的.  

對自動複位的Event對象,它僅釋放第一個等到該事件的thread(如果有),而對于  

人工複位的Event對象,它釋放所有等待的thread.

VC的初學者再學習線程概念的時候往往碰到CreateEvent()函數的使用,對于其中的參數不甚了解,對此做如下說明:

函數原型:

HANDLE CreateEvent(

LPSECURITY_ATTRIBUTES

lpEventAttributes,

// pointer to security attributes

BOOL

bManualReset, // flag for manual-reset

event

BOOL bInitialState, // flag

for initial state

LPCTSTR lpName      // pointer to

event-object name

);

其中有四個參數,分别注解

LPSECURITY_ATTRIBUTES pEventAttributes 安區參數

一般使用者不用考慮它

BOOL bManualReset     表示SetEvent

置位,WaitForSingleObject使用以此後 信号量的有無,為TRUE 的時候,表示有信号,為FALSE為無信号,也可以了解為SetEvent

的作用是置一次信号,與PulseEvent函數作用相同了。

BOOL bInitialState,    表示初始時的信号量有無,為TRUE

的時,表示有信号,反之無信号

LPCTSTR lpName       信号量的别名

其中主要以BOOL bManualReset   , BOOL

bInitialState, 的使用最為重要,采用那種配對方式取決于程式的工作方式了。

上一篇: Servlet監聽器
下一篇: C file函數

繼續閱讀