【事件对象】是一个同步对象,其状态可以通过使用SetEvent或PulseEvent功能显式设置为发出信号。以下是事件对象的两种类型。
目的 | 描述 |
手动复位事件 | 事件对象的状态保持信号,直到它被ResetEvent功能显式地重置为非指定状态。当发出信号时,可以释放任何数量的等待线程或线程,随后在等待功能之一中指定相同的事件对象。 |
自动复位事件 | 事件对象的状态保持信号,直到单个等待线程被释放,此时系统自动将状态设置为非信号状态。如果没有线程正在等待,则事件对象的状态保持信号。 |
事件对象在向线程发送指示特定事件已发生的信号时很有用。例如,在重叠输入和输出中,当重叠操作完成时,系统将指定的事件对象设置为信号状态。单个线程可以在几个同时重叠的操作中指定不同的事件对象,然后使用多对象等待功能之一等待发送任何一个事件对象的状态。
一个线程使用CreateEvent函数创建一个事件对象。创建线程指定对象的初始状态,以及它是手动复位还是自动复位事件对象。创建线程还可以指定事件对象的名称。其他进程中的线程可以通过在调用OpenEvent函数中指定其名称来打开现有事件对象的句柄。有关互斥量,事件,信号量和计时器对象的名称的其他信息,请参阅进程间同步.
线程可以使用PulseEvent函数将事件对象的状态设置为发信号,然后在释放适当数量的等待线程后将其重置为非信号。对于手动重置事件对象,所有等待的线程都被释放。对于自动重置事件对象,该函数只释放一个等待线程,即使多个线程正在等待。如果没有线程正在等待,PulseEvent只需将事件对象的状态设置为非信号状态并返回。