C语言事件
事件对象就像一个开关:它只有两种状态---开和关。当一个事件处于”开”状态,我们称其为”有信号”否则称为”无信号”。可以在一个线程的执行函数中创建一个事件对象,然后观察它的状态,如果是”无信号”就让该线程睡眠,这样该线程占用的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是自动复位还是人工复位:1)如果true,人工复位, 一旦该Event被设置为有信号,则它一直会等到ResetEvent()API被调用时才会恢复 为无信号. 2)如果为false,Event被设置为有信号,则当有一个wait到它的Thread时, 该Event就会自动复位,变成无信号. |
bInitialState | 初始状态,true,有信号,false无信号 |
lpName | 事件对象的名称。您在OpenEvent函数中可能使用。 |
- OpenEvent()API来获得它的Handle
- CloseHandle() 来关闭它
- SetEvent()或PulseEvent()来设置它使其有信号
- ResetEvent() 来使其无信号
- WaitForSingleObject()或WaitForMultipleObjects()来等待其变为有信号
==注意:==对自动复位的Event对象,它仅释放第一个等到该事件的thread(如果有),而对于人工复位的Event对象,它释放所有等待的thread.