zoukankan      html  css  js  c++  java
  • WaitForSingleObject和WaitForMultipleObjects

    在多线程下面,有时候我们会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjects

    这两个函数都会等待Object被标为有信号(signaled)时才返回的

    那么,什么是信号呢?

    简单来说,Windows下创建的Object都会被赋予一个状态量。如果Object被激活了,或者正在使用,那么该Object就是无信号,也就是不可用;另一方面,如果Object可用了,那么它就恢复有信号了。

    这两个函数的优点是它们在等待的过程中会进入一个非常高效沉睡状态,只占用极少的CPU时间片

    WaitForSingleObject有两个参数,分别是THandle和Timeout(毫秒单位)。如果想要等待一条线程,那么你需要指定线程的Handle,以及相应的Timeout时间。当然,如果你想无限等待下去,Timeout参数可以指定系统常量INFINITE。例如:

    WaitForSingleObject(aThread.Handle, INFINITE);

    相对来说,WaitForMultipleObjects要复杂点点,它有四个参数,分别是
    1. cObject,DWORD类型,用于指定句柄数组的数量
    2. lphObjects,Pointer类型,用于指定句柄数组的内存地址
    3. fWaitAll,Boolean类型,True表示函数等待所有指定句柄的Object有信号为止
    4. dwTimeout,DWORD类型,用于指定等待的Timeout时间,单位毫秒,可以是INFINITE

    例如

    var
      handles: Array[0..4] of THandle;
      threads: Array[0..4] of TMyThread;
      i: Integer;
    begin
      for i := 0 to 4 do begin
        threads[i] := TMyThread.Create(False);
        handles[i] := threads[i].Handle;
      end;
      WaitForMultipleObjects(5, @handles, True, INFINITE);
    end;

  • 相关阅读:
    Mac environment setting
    详解nginx.conf文件配置项(包括负载均衡)
    检查windows端口被占用
    linux下的环境变量
    利用MVC思想和php语言写网站的心得
    React学习:列表&&Key
    React学习:条件渲染
    事件处理
    state&生命周期
    react学习:组件&props
  • 原文地址:https://www.cnblogs.com/LeoWong/p/1596282.html
Copyright © 2011-2022 走看看