多线程编程之三——线程间通讯
2007-03-17 22:00:11 来源:WEB开发网双击按钮IDC_SUM,添加消息响应函数:void CMultiThread7Dlg::OnSum()
OnSum()函数的作用是建立CalculateThread线程,延时给该线程发送WM_CALCULATE消息。
{
m_pCalculateThread=
(CCalculateThread*)AfxBeginThread(RUNTIME_CLASS(CCalculateThread));
Sleep(500);
m_pCalculateThread->PostThreadMessage(WM_CALCULATE,nAddend,NULL);
}
右击工程并选中“New Class…”为工程添加基类为 CWinThread 派生线程类 CCalculateThread。
在文件CalculateThread.h 中添加#define WM_CALCULATE WM_USER+1
在文件CalculateThread.cpp中添加
class CCalculateThread : public CWinThread
{
……
protected:
afx_msg LONG OnCalculate(UINT wParam,LONG lParam);
……LONG CCalculateThread::OnCalculate(UINT wParam,LONG lParam)
在CalculateThread.cpp文件的开头添加一条:
{
int nTmpt=0;
for(int i=0;i<=(int)wParam;i++)
{
nTmpt=nTmpt+i;
}
Sleep(500);
::PostMessage((HWND)(GetMainWnd()->GetSafeHwnd()),WM_DISPLAY,nTmpt,NULL);
return 0;
}
BEGIN_MESSAGE_MAP(CCalculateThread, CWinThread)
//{{AFX_MSG_MAP(CCalculateThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
ON_THREAD_MESSAGE(WM_CALCULATE,OnCalculate)
//和主线程对比,注意它们的区别
END_MESSAGE_MAP()#include "MultiThread7Dlg.h"
以上代码为 CCalculateThread 类添加了 WM_CALCULATE 消息,消息的响应函数是 OnCalculate,其功能是根据参数 wParam 的值,进行累加,累加结果在临时变量nTmpt中,延时0.5秒,向主线程发送WM_DISPLAY消息进行显示,nTmpt作为参数传递。
(未完待续)
更多精彩
赞助商链接