WaitForSingleObject函數(shù)原型:
DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
參數(shù)說明:
hHandle:是一個(gè)事件的句柄。
dwMilliseconds:是時(shí)間間隔。如果時(shí)間內(nèi)是有信號(hào)狀態(tài)返回WAIT_OBJECT_0,如果時(shí)間超過dwMilliseconds值但時(shí)間事件還是無信號(hào)狀態(tài)則返回WAIT_TIMEOUT。
WaitForSingleObject函數(shù)用來檢測(cè)hHandle對(duì)象的信號(hào)狀態(tài),當(dāng)函數(shù)的執(zhí)行時(shí)間超過dwMilliseconds就返回,但如果參數(shù)dwMilliseconds為INFINITE時(shí)函數(shù)將直到相應(yīng)時(shí)間事件變成有信號(hào)狀態(tài)才返回,否則就一直等待下去,直到WaitForSingleObject有返回直才執(zhí)行后面的代碼。
HANDLE對(duì)應(yīng)的對(duì)象及這些對(duì)象狀態(tài)對(duì)應(yīng)的情況有:
Thread 線程:
當(dāng)線程結(jié)束時(shí),線程對(duì)象即被激發(fā)。當(dāng)線程還在進(jìn)行時(shí),則對(duì)象處于未激發(fā)狀態(tài)。
Process 進(jìn)程:
當(dāng)進(jìn)程結(jié)束時(shí),進(jìn)程對(duì)象即被激發(fā)。當(dāng)進(jìn)程還在進(jìn)行時(shí),則對(duì)象處于未激發(fā)狀態(tài)。
Change Notification:
當(dāng)一個(gè)特定的磁盤子目錄中發(fā)生一件特別的變化時(shí),此對(duì)象即被激發(fā)。此對(duì)象系由 FindFirstChangeNotification() 產(chǎn)生。
Console Input :
當(dāng)console 窗口的輸入緩沖區(qū)中有數(shù)據(jù)可用時(shí),此對(duì)象將處于激發(fā)狀態(tài)。CreateFile ()和GetStdFile ()兩函數(shù)可以獲得console handle 。
Event 事件:
Event 對(duì)象的狀態(tài)直接受控于應(yīng)用程序所使用的三個(gè) Win32 函數(shù): SetEvent (), PulseEvent (), ResetEvent ()。 CreateEvent ()和 OpenEvent ()都可以傳回一個(gè) event object handle 。 Event 對(duì)象的狀態(tài)也可以被操作系統(tǒng)設(shè)定——如果使用于“overlapped ”操作時(shí)。當(dāng)Event激活時(shí),WaitForSingleObject將會(huì)得到一個(gè)WAIT_OBJECT_0的值。
Mutex 互斥體:
如果mutex 沒有被任何線程擁有,他就是處于激發(fā)狀態(tài)。一旦一個(gè)等待mutex 的函數(shù)返回了,mutex 也就自動(dòng)重置為未激發(fā)狀態(tài)。CreateMutex ()和OpenMutex ()都可以獲得一個(gè) Mutext 的 handle 。
Semaphore 信號(hào)量 :
Semaphore 有點(diǎn)像mutex ,但他有個(gè)計(jì)數(shù)器,可以約束其擁有者(線程)的個(gè)數(shù)。當(dāng)計(jì)數(shù)器內(nèi)容大于0 時(shí), semaphore 處于激發(fā)狀態(tài),當(dāng)計(jì)數(shù)器內(nèi)容等于0 時(shí),semaphore 處于未激發(fā)狀態(tài)。CreateSemaphore ()和OpenSemaphore()可以傳回一個(gè)semaphore handle 。
Job:
暫時(shí)沒搜到到內(nèi)容。。。。。
Waitable timer計(jì)時(shí):
如果計(jì)時(shí)的時(shí)間間隔到達(dá)時(shí),他就處于激活狀態(tài)。CreateWaitableTimer()傳回一個(gè)Waitable timer handle。SetWaitableTimer(),如果SetWaitableTimer調(diào)用時(shí)waitable timer已經(jīng)在計(jì)時(shí)中,則中止前面的計(jì)時(shí),重新開始計(jì)時(shí)。這一過程不會(huì)使 waitable timer變成singled狀態(tài)。只有當(dāng)定時(shí)的間隔到時(shí),waitable timer才會(huì)變成singled狀態(tài)。CancelWaitableTimer ()中止waitable time對(duì)象的計(jì)時(shí)。