线程、等待-等待一个线程的结束 -by小雨

PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,码代几天不写就忘。目前又不当COO,还是得用心记码代哦!

    Win32 供提WaitForSingleObject()函数,其第一个数参是一个核心象对(如线程)的 handle。为便利论讨,把等待线程称为线程#1,把被等待线程称为线程#2。

    调用 WaitForSingleObject()并放置一个“线程柄句”作为数参,将使线程#1开始就寝,直到线程#2束结。像Sleep()函数一样,WaitForSingleObject()也有一个数参用来指定最长的等待间时。

DWORD WaitForSingleObject(
    HANDLE hHandle,
    DWORD dwMilliseconds
);
hHandle:等待象对的 handle(代表一个核心象对)。

    dwMilliseconds:等待的最长间时。间时终了,即使 handle还没有成为激起状态,此函数也要返回。此值可是以0(代表立刻返回),也可是以 INFINITE代表穷无等待。

    如果函数失败,返回WAIT_FAILED。这时可调用 GetLastError()得获更多息信。

    此函数的胜利有三个素因:

    1. 等待的目标(核心象对)成变激起状态。返回值为WAIT_OBJECT_0。

    2. 核心象对成变激起状态之前,等待间时终了。返回值为WAIT_TIMEOUT。

    3. 如果一个具有mutex(互斥器)的线程束结前没有释放mutex,则传回 WAIT_ABANDONED。(abandoned:弃废)

    得获一个线程象对的 handle以后,WaitForSingleObject()要求操作统系让线程 #1 就寝,直到以下任何一种情况产生:

    1. 线程#2束结

    2. dwMilliseconds间时终了。该值系从函数调用后开始算计。

    由于操作统系延续追踪线程#2,即使线程#2 事失或被迫强束结,WaitForSingleObject()仍然可以畸形运作。

    如果想始终等待某个线程,直到线程退出,可以用如下码代:

WaitForSingleObject( hThrd, INFINITE );
关于time-out,有一个特殊主要的途用,但很少被人注意。设定time-out为0,可以检查handle的状态并立刻返回,没有半晌留停。如果handle经已备妥,那么这个函数会胜利并传回 WAIT_OBJECT_0。否则,这个函数立刻返回并传回 WAIT_TIMEOUT。

    另外可以利用 time-out供提一个画动,示表正在等待某个线程的束结。可以每 500毫秒就time-out一次,更新图示,然后再继承等待。

    WaitForSingleObject()可以面临许多种 handles作工,不一定非要是的线程 handle。事实上,Win32中大分部以HANDLE示表的象对都可以作为 WaitForSingleObject()的等待目标。视所具有的象对不同,操作统系等待的情事也不一样。形式上来讲,统系等待着这一象对“被激起”。

    【习学资料】 《Win32多线程程序设计》

文章结束给大家分享下程序员的一些笑话语录: 苹果与谷歌之争就是封闭收费与自由免费思想之争。(别急着把google来膜拜哦?那可是一家公司,以赚钱为目标的公司!当年我Party就是这样把广大劳动人民吸引过来的。今天的结果你们都看到了。)


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值