WaitForSingleObject是一种Windows API函数。当等待仍在
挂起状态时,
句柄被关闭,那么函数行为是未定义的。该句柄必须具有 SYNCHRONIZE
访问权限。
对应函数
VC声明
DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds);
VB声明
说明
DWORD WINAPI WaitForSingleObject(__in HANDLE hHandle,__in DWORD dwMilliseconds);
参数
hHandle[in]对象句柄。可以指定一系列的对象,如Event、Job、Memory resource notification、Mutex、Process、Semaphore、
Thread、Waitable timer等。
dwMilliseconds[in]定时
时间间隔,单位为milliseconds(毫秒).如果指定一个
非零值,函数处于等待状态直到hHandle标记的对象被触发,或者时间到了。如果dwMilliseconds为0,对象没有被触发信号,函数不会进入一个等待状态,它总是立即返回。如果dwMilliseconds为INFINITE,对象被触发信号后,函数才会返回。
返回值
执行成功,
返回值指示出引发函数返回的事件。它可能为以下值:
参数dwMilliseconds有两个具有特殊意义的值:0和INFINITE。若为0,则该函数立即返回;若为INFINITE,则线程一直被挂起,直到hHandle所指向的对象变为有信号状态时为止。
WAIT_ABANDONED 0x00000080:当hHandle为
mutex时,如果拥有mutex的线程在结束时没有释放核心对象会引发此返回值。
WAIT_OBJECT_0 0x00000000 :指定的对象处于有信号状态
WAIT_TIMEOUT 0x00000102:等待超时
WAIT_FAILED 0xFFFFFFFF :出现错误,可通过
GetLastError得到
错误代码在这里举个例子:
先创建一个全局Event对象g_event:
在程序中可以通过调用CEvent::SetEvent设置事件为有信号状态。
下面是一个线程函数MyThreadProc
在这个线程函数中只有设置g_event为有信号状态时才执行下面的
for循环,因为g_event是
全局变量,所以我们可以在别的线程中通过g_event. SetEvent控制这个
线程。
还有一种用法就是可以通过WaitForSingleObject函数来间隔的执行一个线程函数的
函数体在这个线程函数中可以通过设置MT_INTERVAL来控制这个线程的
函数体多久执行一次,当事件为无信号状态时函数体隔MT_INTERVAL执行一次,当设置事件为有信号状态时,线程就执行完毕了。