多線程:建立 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 以開始執行線程。 整個程式都會進行檢查,以確保如果建立的任何部分失敗,所有對象都會正確解除分配。