我们经常在UI线程里面创建一些worker线程来执行一些复杂而冗长的计算任务,也可以创建一个UI线程,比如在点击一个按钮后弹出一个对话框,也可以用一个线程来执行。
只需要继承CWinThread就行了,并重载2个函数:virtual BOOL InitInstance(); virtual int ExitInstance();/
代码如下:
- class CUIThread : public CWinThread
- {
- DECLARE_DYNCREATE(CUIThread)
- protected:
- CUIThread(); // protected constructor used by dynamic creation
- // Attributes
- public:
- // Operations
- public:
- // Overrides
- // ClassWizard generated virtual function overrides
- //{{AFX_VIRTUAL(CUIThread)
- public:
- virtual BOOL InitInstance();
- virtual int ExitInstance();
- //}}AFX_VIRTUAL
- // Implementation
- protected:
- CUIThreadDlg m_dlg;
- virtual ~CUIThread();
- // Generated message map functions
- //{{AFX_MSG(CUIThread)
- // NOTE - the ClassWizard will add and remove member functions here.
- //}}AFX_MSG
- DECLARE_MESSAGE_MAP()
- };
- IMPLEMENT_DYNCREATE(CUIThread, CWinThread)
- CUIThread::CUIThread()
- {
- }
- CUIThread::~CUIThread()
- {
- }
- BOOL CUIThread::InitInstance()
- {
- m_dlg.Create(IDD_UITHREADDLG);
- m_dlg.ShowWindow(SW_SHOW);
- m_pMainWnd=&m_dlg;
- return TRUE;
- }
- int CUIThread::ExitInstance()
- {
- m_dlg.DestroyWindow();
- return CWinThread::ExitInstance();
- }
- BEGIN_MESSAGE_MAP(CUIThread, CWinThread)
- //{{AFX_MSG_MAP(CUIThread)
- // NOTE - the ClassWizard will add and remove mapping macros here.
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /
- // CUIThread message handlers
调用:CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));