MFC 线程消息传递问题二---两个线程之间进行消息的传递

原创 2013年12月02日 14:35:56

在接受消息的线程中进行设置消息映射表来实现消息的处理

负责发送消息的线程在线程的run函数中进行消息的发送:

 //线程之间进行消息传递设置
 CTManageThread* pDealThread = newCTManageThread();
 pDealThread->CreateThread();
 BOOL ret = ::PostThreadMessage(pDealThread->m_nThreadID,WM_USER_THREADEND, 0,0);//把消息传送到指定ID的线程,不等待线程对消息的处理就会立即返回

 

 

这样在接受消息的线程中需要的是在线程执行函数体中进行获取消息并进行消息的转换和派遣:

BEGIN_MESSAGE_MAP(CTManageThread, CWinThread)
 ON_THREAD_MESSAGE(WM_USER_THREADEND,OnManageMess)//添加的消息映射
 //ON_WM_TIMER()
 //ON_COMMAND()
END_MESSAGE_MAP()

void CTManageThread::OnManageMess(WPARAM wParam, LPARAMlParam)
{
  ::OutputDebugString(_T("ON_THREAD_MESSAGEis  runing \r\n"));
}

UINT CTManageThread::TestManageThread(LPVOID pParam)
{//创建线程
 CTManageThread* pDealThread =(CTManageThread*)pParam;
 
 pDealThread->dealMessage();
 return TRUE;
}

void CTManageThread::dealMessage()
{
 MSG msg = {0};
 do
 {
  
::GetMessage(&msg, NULL,0,0);//从消息队列中进行检索有效的消息
  CString str;
  str.Format(_T("%d, 0x%x\r\n"),msg.message, msg.message);
  OutputDebugString(str);
  //this->PreTranslateMessage(&msg);//对于窗体和线程之间来说这个函数更适合,这是对于内部进行判断,然后如果内部没有的话就会给全局的消息翻译函数TranslateMessage
  //::TranslateMessage(&msg);
  this->DispatchThreadMessage(&msg);//对于线程之间进行消息传递的,这个函数更加适合

  CTime t =CTime::GetCurrentTime();
  CString strTime;
  strTime.Format(_T("Deal :d:d:d\r\n"), t.GetHour(), t.GetMinute(), t.GetSecond());
  OutputDebugString(strTime);
  ::Sleep(2000);
 }while(1);
}

相关文章推荐

android 主线程和子线程之间的消息传递

 android 主线程和子线程之间的消息传递        新的认识! 从主线程发送消息到子线程(准确地说应该是非UI线程)  package com.zhuozhuo; i...

Activity、Service、子线程之间的消息传递轻松实现

引子 以前工作中实现界面之间消息传递、service与activity之间的消息传递需要broadcastReceiver来实现不经设计麻烦,而且代码冗余。后来通过查看代码时发现了一个挺不错的方法来...
  • hx3971
  • hx3971
  • 2017年03月20日 21:15
  • 142

Scala深入浅出进阶经典 第68讲:Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析及其在Spark中的应用源码解析

Scala深入浅出进阶经典 第68讲:Scala并发编程原生线程Actor、Cass Class下的消息传递和偏函数实战解析及其在Spark中的应用源码解析...
  • sd637
  • sd637
  • 2015年09月27日 16:00
  • 467

android线程消息传递机制——Looper,Handler,Message

线程间的通信是需要几个类一起配合使用才行,这几个类分别是: Looper,Handler,Message。其实还有一个Message Queue(MQ)的,只不过封装在Looper里面了,我们不会直...

android线程消息传递机制——Looper,Handler,Message

在引入这些概念之前,我们先了解一下引入这些机制的背景。 出于性能优化的考虑,Android的UI操作并不是线程安全的(如果你不懂什么是线程安全,可以阅读一下里的数据安全与可重入),这意味着如果有...

线程通信机制---共享内存:消息传递

在并发编程中,我们必须考虑的问题时如何在两个线程间进行通讯。这里的通讯指的是不同的线程之间如何交换信息。 目前有两种方式: 1、共享内存 2、消息传递(actor 模型)   共享内存 ...

HandlerThread(子线程也可以有消息传递机制)

知识点 HandlerThread,顾名思义,Handler+Thread,就是让子线程也能有一套和MainThread一样的Handler消息机制。HandlerThread本质上是一个线程类,...

异步线程与主线程的消息传递

在Android的学习过程中回到线程和主线程的消息传递和数据交互,这里就介绍下异步类与主线程的消息传递,关于异步类 Async Task我就不做过多介绍了,这里主要是通过handler来传递消息 p...

Android 主线程和子线程消息传递的一点心得

 /**  * @author Evan 2014-11-19  *  * 消息的的星光大道  * 不要界面,直接用日志打出来吧  * 消息机制中各个概念的理解(官方的话,我就不说了...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC 线程消息传递问题二---两个线程之间进行消息的传递
举报原因:
原因补充:

(最多只允许输入30个字)