事件内核对象
多线程程序设计大多会涉及线程间相互通信。主线程在创建工作线
程的时候,可以通过参数给工作线程传递初始化数据,当工作线程
开始运行后,还需要通过通信机制来控制工作线程。同样,工作线
程有时候也需要将一些情况主动通知主线程。一种比较好的通信方
法就是使用事件内核对象。
事 件 对 象 ( event ) 是 一 种 抽 象 的 对 象 , 它 也 有 未 受 信
(nonsignaled)和受信(signaled)两种状态,编程人员可以使用
WaitForSingleObject 函数等待其变成受信状态。不同于其他内核
对象的是,一些函数可以使事件对象在两种状态之间转化。
事件对象包含 3 个成员:
nUsageCount (使用计数)
记录当前的使用计数,当使用计数为 0 的时候,windows 就会销毁
此内核对象占用的资源;
bManualReset(是否人工重置)
指定在一个事件内核对象等待函数返回之后,windows 是否重置这
个对象为受信状态;
bSignaled(是否受信)
指定当前事件内核对象是否受信;
事件对象主要用于线程间的通信,因为它是一个内核对象,所以可
以跨进程使用。依靠在线程间通信就可以使各线程的工作协调进行,
达到同步的目的。
评论1