词条 | WaitForSignalObject |
释义 | DWORD WaitForSingleObject(HANDLE hObject, DWORD dwMilliseconds); 当线程调用该函数时,第一个参数hObject标识一个能够支持被通知/未通知的内核对象 (前面列出的任何一种对象都适用)。第二个参数dwMilliseconds允许该线程指明,为了等待该 对象变为已通知状态,它将等待多长时间。 调用下面这个函数将告诉系统,调用函数准备等待到hProcess句柄标识的进程终止运行为止: WaitForSingleObject(hProcess, INFINITE); 第二个参数告诉系统,调用线程愿意永远等待下去(无限时间量),直到该进程终止运行。 通常情况下, INFINITE是作为第二个参数传递给WaitForSingleObject的,不过也可以传递 任何一个值(以毫秒计算)。顺便说一下, I N F I N I T E已经定义为0xFFFFFFFF(或-1)。当然, 传递I N F I N I T E有些危险。如果对象永远不变为已通知状态,那么调用线程永远不会被唤醒, 它将永远处于死锁状态,不过,它不会浪费宝贵的C P U时间。 DWORD dw = WaitForSingleObject(hProcess,5000); switch(dw) { case WAIT_OBJECT_0: // The process terminated break; case WAIT_TIMEOUT: //The process did not terminated within 5000 milliseconds break; case WAIT_FAILED: //Bad call function (invalid handle?) break; } 上面这个代码告诉系统,在特定的进程终止运行之前,或者在5000ms时间结束之前,调 用线程不应该变为可调度状态。因此,如果进程终止运行,那么这个函数调用将在不到 5000ms的时间内返回,如果进程尚未终止运行,那么它在大约5000ms时间内返回。注意,不 能为dwMillisecond传递0。如果传递了0,WaitForSingleObject函数将总是立即返回。 WaitForSingleObject的返回值能够指明调用线程为什么再次变为可调度状态。如果线程等 待的对象变为已通知状态,那么返回值是WAIT_OBJECT_0。如果设置的超时已经到期,则返 回值是WAIT_TIMEOUT。如果将一个错误的值(如一个无效句柄)传递给WaitForSingleObject,那么返回值将是WAIT_FAILED。 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。