WaitForSingleObject的用法
WaitForSingleObject 的用法
DWORD
WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);
參數(shù) hHandle 是一個事件的句柄,第二個參數(shù) dwMilliseconds 是時間間隔。如果時間是有信號狀態(tài)返回 WAIT_OBJECT_0 ,如果時間超過 dwMilliseconds 值但時間事件還是無信號狀態(tài)則返回 WAIT_TIMEOUT 。
hHandle 可以是下列對象的句柄:
Change notification
Console input
Event
Job
Memory resource notification
Mutex
Process
Semaphore
Thread
Waitable timer
WaitForSingleObject 函數(shù)用來檢測 hHandle 事件的信號狀態(tài),當(dāng)函數(shù)的執(zhí)行時間超過 dwMilliseconds 就返回,但如果參數(shù) dwMilliseconds 為 INFINITE 時函數(shù)將直到相應(yīng)時間事件變成有信號狀態(tài)才返回,否則就一直等待下去,直到 WaitForSingleObject 有返回直才執(zhí)行后面的代碼。在這里舉個例子:
先創(chuàng)建一個全局 Event 對象 g_event:
CEvent g_event;
在程序中可以通過調(diào)用 CEvent::SetEvent 設(shè)置事件為有信號狀態(tài)。
下面是一個線程函數(shù) MyThreadPro()
UINT CFlushDlg::MyThreadProc( LPVOID pParam )
{
WaitForSingleObject(g_event,INFINITE);
For(;;)
{
………… .
}
return 0;
}
在這個線程函數(shù)中只有設(shè)置 g_event 為有信號狀態(tài)時才執(zhí)行下面的 for 循環(huán),因為 g_event 是全局變量,所以我們可以在別的線程中通過 g_event. SetEvent 控制這個線程。
還有一種用法就是我們可以通過 WaitForSingleObject 函數(shù)來間隔的執(zhí)行一個線程函數(shù)的函數(shù)體
UINT CFlushDlg::MyThreadProc( LPVOID pParam )
{
while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0)
{
………………
}
return 0;
}
在這個線程函數(shù)中可以可以通過設(shè)置 MT_INTERVAL 來控制這個線程的函數(shù)體多久執(zhí)行一次,當(dāng)事件為無信號狀態(tài)時函數(shù)體隔 MT_INTERVAL 執(zhí)行一次,當(dāng)設(shè)置事件為有信號狀態(tài)時,線程就執(zhí)行完畢了。