2 回答

TA貢獻2003條經(jīng)驗 獲得超2個贊
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),當函數(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í)行一次,當事件為無信號狀態(tài)時函數(shù)體隔MT_INTERVAL執(zhí)行一次,當設(shè)置事件為有信號狀態(tài)時,線程就執(zhí)行完畢了。
添加回答
舉報