同步) (事件对象
事件对象是一个同步对象,其状态可以通过使用 SetEvent 函数显式设置为发出信号。 下面是两种类型的事件对象。
Object | 说明 |
---|---|
手动重置事件 | 一个事件对象,其状态在 ResetEvent 函数显式重置为非信号之前保持信号。 发出信号时,可以释放任意数量的等待线程或随后在其中一个 等待函数中指定相同事件对象的线程。 |
自动重置事件 | 一个事件对象,其状态一直保持信号,直到释放单个等待线程,此时系统会自动将状态设置为未签名。 如果没有线程在等待,则事件对象的状态将保持已发信号状态。 如果有多个线程正在等待,则选择一个等待线程。 不要假设先入先出 (FIFO) 顺序。 外部事件(如内核模式 APC)可以更改等待顺序。 |
事件对象在向线程发送指示已发生特定事件的信号时很有用。 例如,在重叠的输入和输出中,当重叠操作完成时,系统会将指定的事件对象设置为信号状态。 单个线程可以在多个同时重叠的操作中指定不同的事件对象,然后使用其中一个多对象 等待函数 来等待任何一个事件对象的状态被发出信号。
线程使用 CreateEvent 或 CreateEventEx 函数创建事件对象。 创建线程指定对象的初始状态,以及它是手动重置事件对象还是自动重置事件对象。 创建线程还可以指定事件对象的名称。 其他进程中的线程可以通过在对 OpenEvent 函数的调用中指定其名称来打开现有事件对象的句柄。 有关互斥体、事件、信号灯和计时器对象的名称的其他信息,请参阅 进程间同步。
相关主题