2011-01-24 46 views
-1

我想在同一個類中創建一個簡單的工作線程。然而,也有我面對這3個主要問題,:在類的頭一個線程函數的MFC中的工作線程

  1. 定義
  2. 主題功能致電
  3. 調用線程函數格式

我也很困惑使用AfxBeginThread或CreateThread函數調用來傳遞多個線程參數。任何人都可以請我提供一個簡單的工作線程在MFC上運行,基於上面提供的3件事情嗎?

+1

只需閱讀文檔。在文檔中查找內容的培訓將爲您節省大量時間。這也節省了可能認爲他們應該爲你做的不幸人士的時間。 – 2011-01-24 07:34:35

+0

由於這似乎是一個家庭作業類型的問題,也許最好先向我們展示您迄今爲止所做的工作,然後從那裏獲得建議。 – Dave 2011-01-24 07:59:11

回答

0

類頭中線程函數的定義:它必須是靜態成員,因爲將「this」放入隱藏參數的常用方法不起作用。既然你只有一個參數,你希望這個參數是一個指向結構的指針,並且這個結構的一個成員可以是你的靜態成員可以調用的類實例的「this」。

線程函數調用:由於被調用的函數將使用MFC,調用者調用AfxBeginThread最容易。既然你說線程將是一個工作線程,就調用爲工作線程設計的AfxBeginThread版本(即使它並不重要)。

被調用的線程函數格式。 MSDN描述了AfxBeginThread,並說明了第一個參數必須使用哪種原型。

0

的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。