WaitForSingleObjectDWORDWaitForSingleObject(HANDLEhHandle,DWORDdwMilliseconds);VB声明DeclareFunctionWaitForSingleObjectLib"kernel32"(ByValhHandleAsLong,ByValdwMillisecondsAsLong)AsLong阐明参数hHandle是一个事务的句柄,第二个参数dwMilliseconds是时间间隔。
假设事务是有信号形态返回WAIT_OBJECT_0,假设时间超越dwMilliseconds值但时间事务仍是无信号形态则返回WAIT_TIMEOUT。hHandle能够是下列对象的句柄:ChangenotificationConsoleinputEventJobMemoryresourcenotificationMutexProcessSemaphoreThreadWaitabletimerWaitForSingleObject函数用来检测hHandle事务的信号形态,当函数的施行时间超越dwMilliseconds就返回,但假设参数dwMilliseconds为INFINITE时函数将曲到响应时间事务酿成有信号形态才返回,不然就不断期待下往,曲到WaitForSingleObject有返回值才施行后面的代码。
此外,当dwMilliseconds设置为特殊值0时,测试hHandle核心对象能否被激发,函数立即返回。返回值:WAIT_ABANDONED0x00000080:当hHandle为mutex时,假设拥有mutex的线程在完毕时没有释放核心对象会引发此返回值。
WAIT_OBJECT_00x00000000:核心对象已被激活WAIT_TIMEOUT0x00000102:期待超时WAIT_FAILED0xFFFFFFFF:呈现错误,可通过GetLastError得到错误代码在那里举个例子:先创建一个全局Event对象g_ 在法式中能够通过挪用CEvent::SetEvent设置事务为有信号形态。
下面是一个线程函数MyThreadPro()UINTCFlushDlg::MyThreadProc(LPVOIDpParam){WaitForSingleObject(g_event,INFINITE);For(){…………。}return0;}在那个线程函数中只要设置g_event为有信号形态时才施行下面的for轮回,因为g_event是全局变量,所以我们能够在此外线程中通过g_event。
SetEvent掌握那个线程。
还有一种用法就是我们能够通过WaitForSingleObject函数来间隔的施行一个线程函数的函数体UINTCFlushDlg::MyThreadProc(LPVOIDpParam){while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0){………………}return0;}在那个线程函数中能够能够通过设置MT_INTERVAL来掌握那个线程的函数体多久施行一次,当事务为无信号形态时函数体隔MT_INTERVAL施行一次,当设置事务为有信号形态时,线程就施行完毕了。