同步) (事件对象

事件对象是一个同步对象,其状态可以通过使用 SetEvent 函数显式设置为发出信号。 下面是两种类型的事件对象。

Object 说明
手动重置事件 一个事件对象,其状态在 ResetEvent 函数显式重置为非信号之前保持信号。 发出信号时,可以释放任意数量的等待线程或随后在其中一个 等待函数中指定相同事件对象的线程。
自动重置事件 一个事件对象,其状态一直保持信号,直到释放单个等待线程,此时系统会自动将状态设置为未签名。 如果没有线程在等待,则事件对象的状态将保持已发信号状态。 如果有多个线程正在等待,则选择一个等待线程。 不要假设先入先出 (FIFO) 顺序。 外部事件(如内核模式 APC)可以更改等待顺序。

 

事件对象在向线程发送指示已发生特定事件的信号时很有用。 例如,在重叠的输入和输出中,当重叠操作完成时,系统会将指定的事件对象设置为信号状态。 单个线程可以在多个同时重叠的操作中指定不同的事件对象,然后使用其中一个多对象 等待函数 来等待任何一个事件对象的状态被发出信号。

线程使用 CreateEventCreateEventEx 函数创建事件对象。 创建线程指定对象的初始状态,以及它是手动重置事件对象还是自动重置事件对象。 创建线程还可以指定事件对象的名称。 其他进程中的线程可以通过在对 OpenEvent 函数的调用中指定其名称来打开现有事件对象的句柄。 有关互斥体、事件、信号灯和计时器对象的名称的其他信息,请参阅 进程间同步

使用事件对象