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()的等待目标。视所具有的象对不同,操作统系等待的情事也不一样。形式上来讲,统系等待着这一象对“被激起”。