多執行緒:建立 MFC 使用者介面執行緒
使用者介面執行緒通常用來處理使用者輸入,並獨立于執行應用程式其他部分的執行緒來回應使用者事件。 已為您建立並啟動主要應用程式執行緒(在您的 CWinApp
衍生類別中提供)。 本主題描述建立其他使用者介面執行緒所需的步驟。
建立使用者介面執行緒時,您必須先執行的第一件事是從 CWinThread 衍生類別 。 您必須使用 DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE 宏來宣告及 實 作這個類別。 這個類別必須覆寫某些函式,而且可以覆寫其他函式。 這些函式及其應該執行的動作如下表所示。
建立使用者介面執行緒時要覆寫的函式
函式 | 目的 |
---|---|
ExitInstance | 線上程終止時執行清除。 通常覆寫。 |
InitInstance | 執行執行緒實例初始化。 必須覆寫。 |
OnIdle | 執行執行緒特定的閒置時間處理。 通常不會覆寫。 |
PreTranslateMessage | 先篩選訊息,再分派至 TranslateMessage 和 DispatchMessage 。 通常不會覆寫。 |
ProcessWndProcException | 攔截執行緒訊息和命令處理常式所擲回未處理的例外狀況。 通常不會覆寫。 |
執行 | 控制執行緒的函式。 包含訊息幫浦。 很少被覆寫。 |
MFC 提供兩種 AfxBeginThread
參數多載版本:只能建立背景工作執行緒的版本,以及可以建立使用者介面執行緒或背景工作執行緒的版本。 若要啟動您的使用者介面執行緒,請呼叫 AfxBeginThread 的第 二個多載,並提供下列資訊:
(選擇性)所需的優先順序層級。 預設值為一般優先順序。 如需可用優先順序層級的詳細資訊,請參閱 Windows SDK 中的 SetThreadPriority 。
(選擇性)執行緒所需的堆疊大小。 預設值與建立執行緒的大小堆疊相同。
(選擇性)如果您想要以暫停狀態建立執行緒,CREATE_SUSPENDED。 預設值為 0,或正常啟動執行緒。
(選擇性)所需的安全性屬性。 預設值與父執行緒相同。 如需此安全性資訊格式的詳細資訊,請參閱 Windows SDK 中的SECURITY_ATTRIBUTES 。
AfxBeginThread
為您執行大部分的工作。 它會建立 類別的新物件、使用您提供的資訊初始化它,並呼叫 CWinThread::CreateThread 以開始執行執行緒。 整個程式都會進行檢查,以確保如果建立的任何部分失敗,所有物件都會正確解除配置。