1.想要創建一個用戶界面線程,首先要從CWinThread類派生出一個類來代表用戶界面線程,如class CUIThread ::public CWinThead。
2. 在派生出的用戶界面線程類的.h文件中,必需在類內使用DECLARE_DYNCREATE宏聲明該類。DECLARE_DYNCREATE(CUIThread)
在.cpp文件中,使用IMPLEMENT_DYNCREATE宏來實現該類。IMPLEMENT_DYNCREATE(CUIThread, CWinThread)
3. 這個用戶界面線程類必需重載一些函數,如ExitInstance,InitInstance等。
在MFC的類嚮導中添加MFC類時,會自動完成上述操作。
以對話框爲例,在InitInstance()中添加代碼來創建非模態對話框界面,
BOOL CUIThread::InitInstance()
{
m_pMainWnd = (CWnd*)(new CSwitch00);
((CDialogEx*)m_pMainWnd)->Create(IDC_SWITCH00); //創建非模態對話框
((CDialogEx*)m_pMainWnd)->ShowWindow(SW_HIDE);
return TRUE;
}
上面的CSwitch00是我添加的對話框類
MFC通過參數重載,提供了兩個版本的AfxBeginThread:1)用戶界面線程;2)其他的工作線程。
CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, intnPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize= 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTESlpSecurityAttrs = NULL ); //用來創建用戶界面線程
CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOIDpParam, int nPriority = THREAD_PRIORITY_NORMAL, UINTnStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTESlpSecurityAttrs = NULL ); //創建工作線程
4. 在主線程中想啓動我們的用戶界面線程時,調用AfxBeginThread函數來啓動線程。這裏我們要創建用戶界面線程,使用第一種方法。
第一個參數可以使用宏:
RUNTIME_CLASS( class_name )
該宏返回由class_name 指定的類的一個CRuntimeClass結構指針。後面的參數如沒有特殊要求,可以使用默認值。
返回指向該線程的指針: switch00 = (CUIThread*)AfxBeginThread(RUNTIME_CLASS(CUIThread));//創建新的線程運行另一個對話框進程;
5. 結束用戶界面線程時,調用AfxEndThread。
初次接觸多線程,記錄下來初步認識。