您的位置:首页 > 其它

MFC多线程之用户界面线程

2014-09-04 11:17 260 查看
1、用户界面线程,即UI线程的创建,需要先添加一个继承于CWinThread类的派生类:

class CMy_UI_Thread : public CWinThread
{
DECLARE_DYNCREATE(CMy_UI_Thread)

protected:
CMy_UI_Thread();           // 动态创建所使用的受保护的构造函数
virtual ~CMy_UI_Thread();

public:
virtual BOOL InitInstance();
virtual int ExitInstance();

protected:
DECLARE_MESSAGE_MAP()
};


2、添加一个按钮,在其响应函数中创建线程:

void CUI_ThreadDlg::OnBnClickedBtnUiThread()
{
// TODO: 在此添加控件通知处理程序代码
AfxBeginThread(RUNTIME_CLASS(CMy_UI_Thread));
}
注:别忘了包含CMy_UI_Thread的头文件#include "My_UI_Thread.h"

3、OK,这样一个UI线程就创建了:



4、发送线程消息:

(1)定义一个成员变量CWinThread *pThread;,用于保存新建线程的句柄(初始化为NULL);

(2)添加一个按钮 ;

(3)在对话框类中添加一个成员变量CString m_Msg;

(4)定义一个消息,为了方便定义在stdafx.h中:#define WM_MY_THREAD_MSG WM_APP + 100

(5)在线程类中处理消息映射:

BEGIN_MESSAGE_MAP(CMy_UI_Thread, CWinThread)

ON_THREAD_MESSAGE(WM_MY_THREAD_MSG, threadFunc)

END_MESSAGE_MAP()

(6)threadFunc函数的实现:

void threadFunc(WPARAM wParam, LPARAM lParam);

void CMy_UI_Thread::threadFunc(WPARAM wParam, LPARAM lParam)

{

CUI_ThreadDlg *pDlg = (CUI_ThreadDlg*)wParam;

if (pDlg != NULL)

{

AfxMessageBox(pDlg->m_Msg);

}

}

5、工程源码(包含前一篇工作者线程和本篇UI线程两个工程):

http://download.csdn.net/detail/wwkaven/7862829
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: