VC6.0++ MFC多线程运行

Windows中没有多进程的概念,只有多线程。
在MFC中一般使用AfxBeginThread来启动工作者线程,用新建类,然后new这个类后调用CreateThread方法来启动界面线程。
工作者线程和界面线程的区别是:界面线程比工作者线程多一个可接收windows消息的功能,也就是说,我们可以给界面线程发送自定义消息,让界面线程响应。
来一份工作者线程的代码样例:

// 定义工作者线程函数
UINT ThreadScanSockets(LPVOID pParam)
{
	int i = 0;
	while (1) {
		TRACE("ThreadScanSockets %d\n", ++i);
	}
}

// 调用方法:
AfxBeginThread(ThreadScanSockets, NULL);

界面线程的创建相对复杂,步骤如下:
1、点菜单的查看–建立类向导,Add Class… – New…。
2、填写类名称,如CMyThread,Base Class选择CWinThread,点OK按钮(我这里提示无法打开MyThread.h,其实已经创建成功了,关闭窗口就行了,这个是VC的bug):
在这里插入图片描述
3、注意首先把头文件里的构造函数、析构函数改为public类型。定义一个自定义的用户消息,因为这个类主要是要响应一些消息做一些事情(WM_USER+N), N >= 0:

#define WM_MSG_FIREUIMSG (WM_USER+11) // 用户自定义消息

4、注册消息函数,如下所示(注意你只需要添加ON_THREAD_MESSAGE到这个位置即可,其它代码VC已经自动生成了):

BEGIN_MESSAGE_MAP(CMyThreadMsg, CWinThread)
	//{{AFX_MSG_MAP(CFireUIThreadMsg)
		ON_THREAD_MESSAGE(WM_MSG_FIREUIMSG, CMyThreadMsg::FireUIWork)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

5、剩下的懂C++编程的同学就都懂了,在.h文件里增加:

afx_msg void FireUIWork(WPARAM wpParam, LPARAM lpParam); // 消息处理函数

然后实现它!

void CMyThreadMsg::FireUIWork(WPARAM wpParam, LPARAM lpParam)
{
	TRACE("FireUIWork: wpParam=%d lpParam=%d\n", wpParam, lpParam);
}

6、创建线程并运行:

// 定义全局变量
CFireUIThreadMsg *g_pThread = NULL;
// 其它代码.......
g_pThread = new CFireUIThreadMsg();
g_pThread ->CreateThread();

7、给该线程发送消息:
界面某个位置创建一个按钮,在按钮响应函数里增加下面的代码:
g_pThread->PostThreadMessage(WM_MSG_FIREUIMSG, 100, 200);

调试程序看看效果吧。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值