CreateEvent的⽤法
事件对象就像⼀个开关:它只有两种状态---开和关。当⼀个事件处于”开”状态,我们称其为”有信号”否则称为”⽆信号”。可以在⼀个线程的执⾏函数中创建⼀个事件对象,然后观察它的状态,如果是”⽆信号”就让该线程睡眠,这样该线程占⽤的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函数来清除事件的信号。
waitforsingleobject函数bInitialState            初始状态,true,有信号,false⽆信号
lpName                  事件对象的名称。您在OpenEvent函数中可能使⽤。
注释:
⼀个Event被创建以后,可以⽤OpenEvent()API来获得它的Handle,⽤CloseHandle()    来关闭它,⽤SetEvent()或PulseEvent()来设置它使其有信号,⽤ResetEvent()      来使其⽆信号,⽤WaitForSingleObject()或WaitForMultipleObjects()来等待其变为有信号.
PulseEvent()是⼀个⽐较有意思的使⽤⽅法,正如这个API的名字,它使⼀个Event 对象的状态发⽣⼀次脉冲变化,从⽆信号变成有信号再变成⽆信号,⽽整个操作是原⼦的.
对⾃动复位的Event对象,它仅释放第⼀个等到该事件的thread(如果有),⽽对于⼈⼯复位的Event对象,它释放所有等待的thread.
这⾥有两个API函数⽤来修改事件对象的信号状态:SetEvent和ResetEvent。前者把事件对象设为”有信号”状态,⽽后者正好相反。
在事件对象⽣成后,必须调⽤WaitForSingleObject来让线程进⼊等待状态,该函数的语法如下:
WaitForSingleObject proto hObject:DWORD, dwTimeout:DWORD
hObject -->指向同步对象的指针。事件对象其实是同步对象的⼀种。
dwTimeout --> 等待同步对象变成”有信号”前等待的时间,以毫秒计。当等待的时间超过该值后⽆信号同步对象仍处于”⽆信号”状态,线程不再等待, WaitForSingleObject函数会返回。如果想要线程⼀直等待,请把该参数设为INFINITE(该值等于0xffffffff)。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。