建立低耦合的MFC后台线程

1 篇文章 0 订阅

前言
在目前项目中需要进行大量的数据计算,需要建立一些线程进行后台计算,还需要带消息机制。在MFC的AfxBeginThread带有界面线程和工作线程。
我们需要做的工作为建立一个server类,一个服务server的界面线程用于处理消息,一个work类,一个服务工作的工作线程用于计算。
server类

class Server
{
protected:
	ServerThread* m_ServerThread;//服务线程
	HANDLE m_hMessage;//消息句柄
public:
	Server();
	virtual ~Server();
	void InitServer(HANDLE hMessage);
	void DestoryServer();
	DWORD GetThreadId();//给出线程ID,用于消息传递
};

在服务类中存放需要传递的界面句柄,方便给于消息的回复,初始时建立服务线程,使用完毕后销毁服务。可以获取服务线程的ID传递消息。

Sever server;
HANDLE hMessage = XXDlg.m_hWnd;
server.InitServer(hMessage );//启动服务
::::PostThreadMessage(m_ServerId, WM_SERVER, 0, 0);//传递消息
//线程的建立
m_ServerThread = (ServerThread*)AfxBeginThread(RUNTIME_CLASS(ServerThread));

ServerThread类

class ServerThread : public CWinThread
{
	DECLARE_DYNCREATE(ServerThread)
protected:
	ServerThread();           // 动态创建所使用的受保护的构造函数
	virtual ~ServerThread();
	HANDLE m_hMessage;//消息句柄
public:
	virtual BOOL InitInstance();
	virtual int ExitInstance();
	void OnMessage(WPARAM wparam, LPARAM lparam);//处理消息
	void SetMessageHandle(HANDLE hMessage);
protected:
	DECLARE_MESSAGE_MAP()
};

服务线程类继承与CWinThread,初始化在InitInstance,结束在ExitInstance,消息处理在OnMessage,设置句柄用于消息的传递。

//消息的定义
BEGIN_MESSAGE_MAP(ServerThread, CWinThread)
	ON_THREAD_MESSAGE(WM_SERVER, OnMessage)
END_MESSAGE_MAP()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值