使用 C++ 和 MFC 進行多執行緒處理
Microsoft Foundation Class (MFC) 連結庫支援多線程應用程式。 本主題描述多線程的進程和線程和 MFC 方法。
進程是應用程式的執行實例。 例如,當您按兩下 [記事本] 圖示時,會啟動執行 [記事本] 的程式。
線程是進程內執行的路徑。 當您啟動記事本時,操作系統會建立進程,並開始執行該程式的主要線程。 當這個線程終止時,進程也是如此。 此主要線程會以函式位址的形式,由啟動程式代碼提供給操作系統。 通常是提供的 或 WinMain
函式位址main
。
如有需要,您可以在應用程式中建立其他線程。 當您不想讓使用者等待背景或維護工作完成時,您可能會想要這麼做來處理背景或維護工作。 MFC 應用程式中的所有線程都會以 CWinThread 物件表示。 在大部分情況下,您甚至不需要明確建立這些物件;而是呼叫架構協助程式函式 AfxBeginThread,這會為您建立 CWinThread
物件。
MFC 區分兩種類型的線程:使用者介面線程和背景工作線程。 使用者介面線程通常用來處理使用者輸入,並回應使用者所產生的事件和訊息。 背景工作線程通常用來完成不需要使用者輸入的工作,例如重新計算。 Win32 API 不會區分線程類型;它只需要知道線程的起始位址,才能開始執行線程。 MFC 會藉由為使用者介面中的事件提供訊息幫浦,特別處理使用者介面線程。 CWinApp
是使用者介面線程物件的範例,因為它衍生自 CWinThread
並處理使用者所產生的事件和訊息。
應特別注意一個以上的線程可能需要存取同一個對象的情況。 多線程:程序設計秘訣 說明可用來解決這些情況下可能發生的問題的技術。 多線程:如何使用同步處理類別 描述如何使用可用來將多個線程存取的類別同步處理至單一物件。
撰寫和偵錯多線程程式設計本質上是一項複雜且棘手的工作,因為您必須確保一次不會由一個以上的線程存取物件。 多線程主題不會教導多線程程序設計的基本概念,只會說明如何在多線程程式中使用 MFC。 Visual C++中包含的多線程 MFC 範例會說明 MFC 未包含的一些多線程新增功能和 Win32 API;不過,它們只是要作為起點。
如需操作系統如何處理進程和線程的詳細資訊,請參閱 Windows SDK 中的進程和線程 。
如需 MFC 多線程支援的詳細資訊,請參閱下列主題: