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