WaitForSignalObject

王朝百科·作者佚名  2010-03-02
窄屏简体版  字體: |||超大  

DWORD WaitForSignalObject(HANDLE hObject, DWORD dwMilliseconds);

当线程调用该函数时,第一个参数h O b j e c t标识一个能够支持被通知/未通知的内核对象

(前面列出的任何一种对象都适用)。第二个参数d w M i l l i s e c o n d s允许该线程指明,为了等待该

对象变为已通知状态,它将等待多长时间。

调用下面这个函数将告诉系统,调用函数准备等待到h P r o c e s s句柄标识的进程终止运行为止:

WaitForSignalObject(hProcess, INFINITE);

第二个参数告诉系统,调用线程愿意永远等待下去(无限时间量),直到该进程终止运行。

通常情况下, I N F I N I T E是作为第二个参数传递给Wa i t F o r S i n g l e O b j e c t的,不过也可以传递

任何一个值(以毫秒计算)。顺便说一下, I N F I N I T E已经定义为0 x F F F F F F F F(或-1)。当然,

传递I N F I N I T E有些危险。如果对象永远不变为已通知状态,那么调用线程永远不会被唤醒,

它将永远处于死锁状态,不过,它不会浪费宝贵的C P U时间。

DWORD dw = WaitForSignalObject(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;

}

上面这个代码告诉系统,在特定的进程终止运行之前,或者在5 0 0 0 m s时间结束之前,调

用线程不应该变为可调度状态。因此,如果进程终止运行,那么这个函数调用将在不到

5 0 0 0 m s的时间内返回,如果进程尚未终止运行,那么它在大约5 0 0 0 m s时间内返回。注意,不

能为d w M i l l i s e c o n d传递0。如果传递了0,Wa i t F o r S i n g l e O b j e c t函数将总是立即返回。

Wa i t F o r S i n g l e O b j e c t的返回值能够指明调用线程为什么再次变为可调度状态。如果线程等

待的对象变为已通知状态,那么返回值是WA I T _ O B J E C T _ 0。如果设置的超时已经到期,则返

回值是WA I T _ T I M E O U T。如果将一个错误的值(如一个无效句柄)传递给Wa i t F o r S i n g l e

O b j e c t,那么返回值将是WA I T _ FA I L E D(

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航