• 浅尝《Windows核心编程》之 等待函数


    这些等待函数可以供所有的内核对象共用。

    (1)       WaitForSingleObject()

    DWORD WaitForSingleObject(
    HANDLE hHandle,
    DWORD dwMilliseconds);

    参数与返回值

    参数hHandle是一个事件的句柄,第二个参数dwMilliseconds是时间间隔(以毫秒为单位,INFINITE表示直到等到hHandle为已通知状态)。如果时间是已通知状态,返回WAIT_OBJECT_0;如果时间超过dwMilliseconds值但时间事件还是未通知状态,则返回WAIT_TIMEOUT; 当函数调用失败,返回WAIT_FAILED

    (2)       WairForMultipleObjects()

     

    DWORD WINAPI WaitForMultipleObjects(
      __in  DWORD nCount,
      __in  
    const HANDLE *lpHandles,
      __in  BOOL bWaitAll,
      __in  DWORD dwMilliseconds
    );

    参数含义

    (1)dwCount参数

              用于指明想要让函数查看的内核对象的数量。这个值必须在1MAXIMUM_WAIT_OBJECTS(Windows头文件中定义为64之间)。

    (2)phObjects参数

             指向内核对象句柄的数组的指针。可以以两种不同的方式来使用WaitForMultipleObjects函数。一种方式是让线程进入等待状态,直到指定内核对象中的任何一个变为已通知状态(第三参数为false)。另一种方式是让线程进入等待状态,直到所有指定的内核对象都变为已通知状态(第三参数为true)

    (3)fWaitAll参数

             告诉该函数,你想要让它使用何种方式。如果为该参数传递TRUE,那么在所有对象变为已通知状态之前,该函数将不允许调用线程运行。

    (4)dwMil liseconds参数

              该参数的作用与它在WaitForSingleObject中的作用完全相同。如果在等待的时候规定的时间到了,那么该函数无论如何都会返回。同样,通常为该参数传递INFINITE,但是在编写代码时应该小心,以避免出现死锁情况。

    返回值 

    WaitForMultipleObjects函数的返回值告诉调用线程,为什么它会被重新调度。可能的返回值是WAIT_FAILEDWAIT_TIMEOUT。如果为f WaitAll参数传递TRUE,同时所有对象均变为已通知状态,那么返回值是WAIT_OBJECT_0。如果为fWaitAll传递FALSE,那么一旦任何一个对象变为已通知状态,该函数便返回。在这种情况下,可以通过类似下面的实例来查找到底是哪一个成为了已通知状态。

     

    以下是一个使用实例,注意怎么查询哪一个内核对象变为已通知状态。

     

    Code

     

     

  • 相关阅读:
    gitlab修改root管理员密码
    【树形 DP】AcWing 325. 计算机
    【图论】AcWing 369. 北大ACM队的远足(DAG 必须边 + 双指针)
    【数据结构】子序列自动机
    前端登录,这一篇就够了(Cookie, Session, Token)
    如何实现一个让面试官惊艳的深克隆
    数据分析前端正则🚀TOP10, 必用⭐正则(77条)
    阿里云ECS安装Archlinux
    golang 哪些类型可以作为map key
    Oracle DG hw重启操作
  • 原文地址:https://www.cnblogs.com/aicro/p/1501179.html
Copyright © 2020-2023  润新知