我想在同一個類中創建一個簡單的工作線程。然而,也有我面對這3個主要問題,:在類的頭一個線程函數的MFC中的工作線程
- 定義。
- 主題功能致電。
- 調用線程函數格式。
我也很困惑使用AfxBeginThread或CreateThread函數調用來傳遞多個線程參數。任何人都可以請我提供一個簡單的工作線程在MFC上運行,基於上面提供的3件事情嗎?
我想在同一個類中創建一個簡單的工作線程。然而,也有我面對這3個主要問題,:在類的頭一個線程函數的MFC中的工作線程
我也很困惑使用AfxBeginThread或CreateThread函數調用來傳遞多個線程參數。任何人都可以請我提供一個簡單的工作線程在MFC上運行,基於上面提供的3件事情嗎?
類頭中線程函數的定義:它必須是靜態成員,因爲將「this」放入隱藏參數的常用方法不起作用。既然你只有一個參數,你希望這個參數是一個指向結構的指針,並且這個結構的一個成員可以是你的靜態成員可以調用的類實例的「this」。
線程函數調用:由於被調用的函數將使用MFC,調用者調用AfxBeginThread最容易。既然你說線程將是一個工作線程,就調用爲工作線程設計的AfxBeginThread版本(即使它並不重要)。
被調用的線程函數格式。 MSDN描述了AfxBeginThread,並說明了第一個參數必須使用哪種原型。
理想情況下,你永遠不應該使用CreateThred。如果你使用MFC,你必須使用AfxBeginThread來創建線程。
我已經給了一些解釋在這裏討論:http://www.daniweb.com/forums/thread249210.html
的CreateThread主要是針對UI線程,但仍然是首選用於AfxBeginThread第二種方法。在頭中存儲對線程句柄的引用,而不是線程。
HANDLE hThread;
然後在源頭開始你的線程指向您PROC:
CWinThread *pThread;
if(!(pThread = AfxBeginThread(ThreadProc, NULL, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED))) {
delete arr;
}
::DuplicateHandle(GetCurrentProcess(), pThread->m_hThread, GetCurrentProcess(), &hThread, 0, FALSE, DUPLICATE_SAME_ACCESS);
pThread->ResumeThread();
啓動它暫停,因此,你可以把手複製到已存儲在報頭中的一個。這樣你可以使用存儲的句柄來檢查exitcode。
只需閱讀文檔。在文檔中查找內容的培訓將爲您節省大量時間。這也節省了可能認爲他們應該爲你做的不幸人士的時間。 – 2011-01-24 07:34:35
由於這似乎是一個家庭作業類型的問題,也許最好先向我們展示您迄今爲止所做的工作,然後從那裏獲得建議。 – Dave 2011-01-24 07:59:11