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