Event对象
Event对象是一个同步对象,它的状态可以被SetEvent函数显式的设置成为signaled状态。下面是event对象的两种类型:
对象 | 描述 |
手动重置event | Event对象的状态会保持signaled状态,除非显式的调用ReseEvent函数将它重置为nonsignaled状态。一旦它的状态被设置成为signaled,所有等待它的线程都将被释放 |
自动重置event | Event对象的状态会保持signaled状态,直到等待他的线程被释放,在这个时候,系统自动将它的状态设置为nonsignaled。 如果没有线程在等待,event对象的状态将一直是signaled。如果有多个线程等待这个event,只有一个线程会被释放。不要以为这个遵循先进先出的顺序。外部的事件,比如内核模式的APCs会改变这个等待顺序。 |
Event事件非常有用,它可以为一个线程发送一个信号,告诉它一个特定的事件发生了。举个例子,在多重输入输出中,当重叠的操作完成时,系统将一个event对象设置成为signaled状态。单个线程可以为每一个同时进行的操作声明不同的event对象,然后利用等待函数等待任意一个对象被设置成为signaled状态。
线程可以使用CreateEvent和CreateEventEx函数来创建event对象。线程声明这个对象的初始状态,是一个自动重置还是一个手动重置event对象。线程也可以给event对象起个名字,其他进程中的线程就可以利用OpenEvent函数打开一个有名字的event对象的句柄。查看“进程间同步”,以了解更多的mutex,event,semaphore和timer对象的名称。