WEB开发网
开发学院软件开发VC 多线程编程之三——线程间通讯 阅读

多线程编程之三——线程间通讯

 2007-03-17 22:00:11 来源:WEB开发网   
核心提示: 双击按钮IDC_SUM,添加消息响应函数:void CMultiThread7Dlg::OnSum(){m_pCalculateThread=(CCalculateThread*)AfxBeginThread(RUNTIME_CLASS(CCalculateThread));Sleep(5

双击按钮IDC_SUM,添加消息响应函数:void CMultiThread7Dlg::OnSum()
{
  m_pCalculateThread=
    (CCalculateThread*)AfxBeginThread(RUNTIME_CLASS(CCalculateThread));
  Sleep(500);
  m_pCalculateThread->PostThreadMessage(WM_CALCULATE,nAddend,NULL);
}
OnSum()函数的作用是建立CalculateThread线程,延时给该线程发送WM_CALCULATE消息。

右击工程并选中“New Class…”为工程添加基类为 CWinThread 派生线程类 CCalculateThread。

在文件CalculateThread.h 中添加#define WM_CALCULATE WM_USER+1
class CCalculateThread : public CWinThread
{
……
protected:
  afx_msg LONG OnCalculate(UINT wParam,LONG lParam);
……
在文件CalculateThread.cpp中添加LONG CCalculateThread::OnCalculate(UINT wParam,LONG lParam)
{
  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()
在CalculateThread.cpp文件的开头添加一条:#include "MultiThread7Dlg.h"  以上代码为 CCalculateThread 类添加了 WM_CALCULATE 消息,消息的响应函数是 OnCalculate,其功能是根据参数 wParam 的值,进行累加,累加结果在临时变量nTmpt中,延时0.5秒,向主线程发送WM_DISPLAY消息进行显示,nTmpt作为参数传递。

编译并运行该例程,体会如何在线程间传递消息。

(未完待续)

上一页  1 2 3 

Tags:线程 编程 线程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接