前言
在目前项目中需要进行大量的数据计算,需要建立一些线程进行后台计算,还需要带消息机制。在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()