多線程-----創建用戶界面線程

1.想要創建一個用戶界面線程,首先要從CWinThread類派生出一個類來代表用戶界面線程,如class CUIThread ::public CWinThead。

2. 在派生出的用戶界面線程類的.h文件中,必需在類內使用DECLARE_DYNCREATE宏聲明該類。DECLARE_DYNCREATE(CUIThread)

                                        在.cpp文件中,使用IMPLEMENT_DYNCREATE宏來實現該類。IMPLEMENT_DYNCREATE(CUIThread, CWinThread)

3. 這個用戶界面線程類必需重載一些函數,如ExitInstanceInitInstance等。

   在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

 

初次接觸多線程,記錄下來初步認識。

 

 

 

 

 

          

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章