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