共用方式為


多線程:建立 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 進行多執行緒處理