2010年8月17日 星期二

Thread 常用的同步方式

有時後我們會使用 Thread 來在背景做一些事,僅僅是為了不讓畫面被 main thread 卡住,若我們需要等待 thread 做完事才處理接下來的動作,可以使用以下 Windows API


::WaitForSingleObject(HANDLE, DWORD);


第一個參數 Handle 即是 Thread 的指標,即是 AfxBeginThread() 回傳的指標,第二個即是時間,以毫秒計算,INFINITE 被定義為 UINT 最大值。

例如

CWinThread *threadHandle = AfxBeginThread(LoadParam, (LPVOID)this);
::WaitForSingleObject(threadHandle , INFINITE);


這個 threadHandle 的用處很多,還可以用來暫停或將已暫停的設為繼續,例如


threadHandle->SuspendThread(); // 暫停
threadHandle->ResumeThread(); // 繼續

沒有留言:

張貼留言