zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    清除浮动的原理剖析
    修正IE6不支持position:fixed的bug(转)
    Callbacks vs Events
    垂直属性
    jQuery的事件模型
    Dean-Edward的事件系统实现
    简单的导航栏实现
    弹窗层效果的实现(非jQuery实现)
    rmdir
    mkdir
  • 原文地址:https://www.cnblogs.com/yuohoo/p/2987952.html
Copyright © 2011-2022 走看看