• event与WaitForSingleObject、MsgWaitForMultipleObjects等


      线程一般是死循环,需要一些条件来退出或者执行某些操作,event做这种条件就很合适了。

      1、CreateEvent:创建一个命名或者无名的事件对象,函数定义:

      HANDLE CreateEvent(
      LPSECURITY_ATTRIBUTES lpEventAttributes,
      BOOL bManualReset,
      BOOL bInitialState,
      LPTSTR lpName);

      lpEventAttributes:忽略,必须是NULL;

      bManualReset:指定将事件对象创建成手动复原还是自动复原。如果是TRUE,那么必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,当事件被一个等待线程释放以后,系统将会自动将事件状态复原为无信号状态。

      bInitialState:指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。

      lpName:事件对象的名称,如果是NULL,表示无名事件对象。

      2、SetEvent和ResetEvent:将事件设置为发信号与不发信号状态。

      BOOL SetEvent(
      HANDLE hEvent );

      BOOL ResetEvent(
      HANDLE hEvent );

      hEvent:事件对象句柄。

      3、PulseEvent:使一个事件对象的状态发生一次脉冲变化,从无信号变成有信号再变成无信号,而整个操作是原子的。

      BOOL PulseEvent(
      HANDLE hEvent );

      hEvent:事件对象句柄。

      4、WaitForSingleObject:等待(阻塞),直到参数所指定的OBJECT成为发信号状态时才返回,OBJECT可以是EVENT,也可以是其它内核对象。
       DWORD WaitForSingleObject(
      HANDLE hHandle,
      DWORD dwMilliseconds );

      hHandle:对象句柄,如事件对象的句柄。

      dwMilliseconds:指定超时毫秒数,如果是0,函数测试对象状态就立马返回,如果是INFINITE,函数永不超时。

      返回值:

      WAIT_ABANDONED:指定的对象是一个互斥对象,该对象没有被拥有该对象的线程在线程结束前释放。互斥对象的所有权被同意授予调用该函数的线程。互斥对象被设置成为无信号状态。

      WAIT_OBJECT_0:核心对象已被激活。

      WAIT_TIMEOUT:等待超时。

      WAIT_FAILED:出现错误,可以通过GetLastError得到错误码。

      5、MsgWaitForMultipleObjects:当对象中的某个或者系列对象处于信号状态时返回,或者规定时间已过也返回。

      DWORD MsgWaitForMultipleObjects(
      DWORD nCount,
      LPHANDLE pHandles,
      BOOL fWaitAll,
      DWORD dwMilliseconds,
      DWORD dwWakeMask );

      nCount:句柄个数。

      pHandles:句柄数组。

      fWaitAll:是否等待所有的handles被激发才返回。

      dwMilliseconds:超时时间。

      dwWakeMask:欲观察的用户输入消息类型

      6、常规用法:先创建事件对象CreateEvent,然后在线程中WaitForSingleObject或者MsgWaitForMultipleObjects,然后在适当的时候SetEvent。

  • 相关阅读:
    【Docker 命令】- ps命令
    【Docker 命令】- exec命令
    【Docker 命令】- create命令
    【Docker 命令】- pause/unpause 命令
    【Docker 命令】- rm命令
    【Docker 命令】- kill命令
    【Docker 命令】- start/stop/restart命令
    【Docker 命令】- run命令
    【Docker】- 基本命令
    深度学习原理与框架- batch_normalize(归一化操作)
  • 原文地址:https://www.cnblogs.com/yuohoo/p/2987952.html
Copyright © 2020-2023  润新知