多執行緒:建立使用者介面執行緒
使用者介面執行緒通常用來處理使用者輸入和回應與執行緒沒有關係之執行應用程式其他部分的使用者事件。 主要的應用程式執行緒 (在 CWinApp 衍生類別中提供) 已經為您建立並且啟動。 這個主題說明建立額外使用者介面執行緒的必須步驟。
建立使用者介面執行緒時您必須要做的第一件事,是從 CWinThread 衍生類別。 您必須使用 DECLARE_DYNCREATE 和 IMPLEMENT_DYNCREATE 巨集來宣告和實作這個類別。 這個類別必須覆寫一些函式,而且還可以覆寫其他的函式。 這些函式和它們的功能會在下表中說明。
在建立使用者介面執行緒時要覆寫的函式
Function |
用途 |
---|---|
執行緒結束時會執行清除。 通常覆寫。 |
|
執行執行緒執行個體 (Instance) 初始化。 必須被覆寫。 |
|
執行執行緒特定的閒置 (Idle) 時間處理。 通常不覆寫。 |
|
在訊息分派到 TranslateMessage 和 DispatchMessage 之前篩選它們。 通常不覆寫。 |
|
攔截由執行緒的訊息和命令列處理常式所擲回的未處理例外狀況。 通常不覆寫。 |
|
執行緒的控制函式。 包含訊息幫浦 (Message Pump)。 幾乎不覆寫。 |
MFC 傳遞參數多載提供 AfxBeginThread 的兩個版本:只可以建立背景工作執行緒可以建立使用者介面執行緒或背景工作執行緒的一個。 若要啟動使用者介面執行緒,請呼叫 AfxBeginThread第二個多載,提供下列資訊:
衍生自 CWinThread 之類別的 RUNTIME_CLASS。
(選擇項) 想要的優先權等級。 預設值是一般優先權。 如需可用的優先權層級,請參閱 Windows SDK 中的 SetThreadPriority。
(選擇項) 想要的執行緒堆疊大小。 預設為與建立的執行緒堆疊大小相同。
(選擇項) CREATE_SUSPENDED 如果您要將執行緒建立在暫停狀態。 預設值為 0,或是正常啟動執行緒。
(選擇項) 想要的安全屬性。 預設為與父執行緒相同的存取。 如需這個安全資訊格式的詳細資訊,請參閱 Windows SDK 中的 SECURITY_ATTRIBUTES。
AfxBeginThread 會為您做大部分的工作。 它會為您的類別建立新物件,用您所提供的資訊將它初始化,並且呼叫 CWinThread::CreateThread 來開始執行執行緒。 整個程序都會進行檢查,確保建立的任何部分萬一失敗時,所有物件都會適當地解除配置。