Windows多线程编程(3)同步对象——Event对象


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对象的名称。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值