c++ 线程中CreateEvent SetEvent/ResetEvent WaitForSingleObject的使用

HANDLE CreateEvent(

  LPSECURITY_ATTRIBUTES lpEventAttributes,   // 安全属性

  BOOL bManualReset,   // 复位方式,如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态。

  BOOL bInitialState,   // 初始状态,如果为TRUE,初始状态为有信号状态;否则为无信号状态。

  LPCTSTR lpName   // 对象名称

);


DWORD WaitForSingleObject(

  HANDLE hHandle,

  DWORD dwMilliseconds

);

参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔。如果时间是有信号状态返回WAIT_OBJECT_0,如果时间超过dwMilliseconds值但时间事件还是无信号状态则返回WAIT_TIMEOUT。

但如果参数dwMilliseconds为INFINITE时 函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去;为0则立马返回。


一、一个线程等另一个线程执行完再执行

CreateEvent(NULL, TRUE, TRUE, NULL);//创建一个事件,必须用resetevent来复原;初时有信号。


 if(WaitForSingleObject(m_pLaserThread->m_pEventMarkOver, INFINITE) == WAIT_OBJECT_0)//会一直等待知道resetevent
    {
    }


二、一个线程循环执行某一段程序直到另一个线程结束。

m_pEventMarkCurveOver = CreateEvent(NULL, true, false, NULL);//创建一个事件,必须用resetevent还原,初时没信号。

 while( WaitForSingleObject(m_pCurveThread->m_pEventMarkCurveOver, 0) != WAIT_OBJECT_0)//立马返回,一直循环,知道setevent有信号。
            {}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值