分享方式:


多執行緒:建立 MFC 使用者介面執行緒

使用者介面執行緒通常用來處理使用者輸入,並獨立于執行應用程式其他部分的執行緒來回應使用者事件。 已為您建立並啟動主要應用程式執行緒(在您的 CWinApp 衍生類別中提供)。 本主題描述建立其他使用者介面執行緒所需的步驟。

建立使用者介面執行緒時,您必須先執行的第一件事是從 CWinThread 衍生類別 。 您必須使用 DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE 宏來宣告及 實 作這個類別。 這個類別必須覆寫某些函式,而且可以覆寫其他函式。 這些函式及其應該執行的動作如下表所示。

建立使用者介面執行緒時要覆寫的函式

函式 目的
ExitInstance 線上程終止時執行清除。 通常覆寫。
InitInstance 執行執行緒實例初始化。 必須覆寫。
OnIdle 執行執行緒特定的閒置時間處理。 通常不會覆寫。
PreTranslateMessage 先篩選訊息,再分派至 TranslateMessageDispatchMessage 。 通常不會覆寫。
ProcessWndProcException 攔截執行緒訊息和命令處理常式所擲回未處理的例外狀況。 通常不會覆寫。
執行 控制執行緒的函式。 包含訊息幫浦。 很少被覆寫。

MFC 提供兩種 AfxBeginThread 參數多載版本:只能建立背景工作執行緒的版本,以及可以建立使用者介面執行緒或背景工作執行緒的版本。 若要啟動您的使用者介面執行緒,請呼叫 AfxBeginThread 的第 二個多載,並提供下列資訊:

  • 衍生自 CWinThread 的類別RUNTIME_CLASS

  • (選擇性)所需的優先順序層級。 預設值為一般優先順序。 如需可用優先順序層級的詳細資訊,請參閱 Windows SDK 中的 SetThreadPriority

  • (選擇性)執行緒所需的堆疊大小。 預設值與建立執行緒的大小堆疊相同。

  • (選擇性)如果您想要以暫停狀態建立執行緒,CREATE_SUSPENDED。 預設值為 0,或正常啟動執行緒。

  • (選擇性)所需的安全性屬性。 預設值與父執行緒相同。 如需此安全性資訊格式的詳細資訊,請參閱 Windows SDK 中的SECURITY_ATTRIBUTES

AfxBeginThread 為您執行大部分的工作。 它會建立 類別的新物件、使用您提供的資訊初始化它,並呼叫 CWinThread::CreateThread 以開始執行執行緒。 整個程式都會進行檢查,以確保如果建立的任何部分失敗,所有物件都會正確解除配置。

您還想知道關於哪些方面的詳細資訊?

另請參閱

使用 C++ 和 MFC 進行多執行緒處理