怎么实现子线程与主线程间的消息传递

lgr0106 2013-06-24 10:55:19
小弟最近新接触C++,现在有这样一种需求,就是子线程中运行一个while死循环,每执行完一次while循环,给主线程发一消息(event?),主线程接收消息后,执行一段消息响应函数,子线程和主线程函数分别在两个不同的类中.
即类A为主线程,主线程中打开一个子线程,线程函数为类B中的函数funB,funB给类A发消息后,在主线程中执行类A中的响应函数funA.请问在类A和B中代码分别应该怎么写……谢谢!
...全文
1337 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
getinposition 2013-06-24
  • 打赏
  • 举报
回复
事件,临界区,互斥量,信号灯,搜搜相关文章试试。
zybjtu 2013-06-24
  • 打赏
  • 举报
回复
没有窗口的话,是挺麻烦的。 你可以申请一个互斥对象,或者临界区或者事件对象之类的。 然后由子线程来负责这个对象的信号量的释放之类的,这个可以么 归根到底还是线程同步问题
lgr0106 2013-06-24
  • 打赏
  • 举报
回复
引用 3 楼 Qyee16 的回复:
1、window编程中,自定义消息 在创建子线程时,把主线程的句柄带进去,然后,postmessage,把消息抛给主线程所在的窗口,窗口中定义并接受此消息的处理函数,就OK了。
我的程序木有窗口,所有数据都是在后台进行的……这时候消息怎么抛给主线程呀…?可以说的再详细点么,谢谢!
lgr0106 2013-06-24
  • 打赏
  • 举报
回复
引用 1 楼 starytx 的回复:
可以发送自定义消息。关于自定义消息,搜一下,很简单的
搜到的自定义消息大部分都是关于窗口操作的……但是我的程序没有窗口,只是在程序内部对数据进行处理,所有的数据处理都是在后台执行的,老师提出的实际要求是……开一个子线程循环接收以太网(socket)传输来的数据,子线程接收到以太网的数据后,给主线程发送消息,在主线程中对子线程中接收到是数据进行处理,并将处理后的数据转发到CAN总线上。整个过程木有窗口程序,这种消息怎么从子线程发到主线程中,让主线程相应相关的函数啊……
Qyee16 2013-06-24
  • 打赏
  • 举报
回复
1、window编程中,自定义消息 在创建子线程时,把主线程的句柄带进去,然后,postmessage,把消息抛给主线程所在的窗口,窗口中定义并接受此消息的处理函数,就OK了。
橡木疙瘩 2013-06-24
  • 打赏
  • 举报
回复
如是窗口程序,让子线程向主线程创建的窗口发自定义消息,用SendMessage(子线程会待主线程处理完毕)或PostMessage(子线程发送消息后就继续自己的事)。 如果不是窗口程序,就必需让主线程轮询,可以用一个flag,子线程设置flag,主线程定期检查flag,如果被置位,则进行相应处理并将flag复位。flag用临界区保护,这种方法除了在两个线程同时入临界区时以外,主线程不会被阻塞。当然也可以用Event,子线程SetEvent,主线程定期WaitForSingleObject,把超时设为1。如果子线程需要等待主线程的处理,就再加一个Event,子线程设置flag/触发Event1之后等特第二个Event,主线程处理完毕后触发第二个Event。 参见MSDN: SendMessage PostMessage InitializeCriticalSectionEx EnterCriticalSection LeaveCriticalSection CreateEventEx OpenEvent SetEvent PulseEvent ResetEvent
starytx 2013-06-24
  • 打赏
  • 举报
回复
可以发送自定义消息。关于自定义消息,搜一下,很简单的
qq120848369 2013-06-24
  • 打赏
  • 举报
回复
线程间通讯。
从零开始讲述Java多线程的核心知识,通过板书和一步一步画图的方式,引领大家逐步去理解和掌握这些知识;并深入分析源码实现,理解背后的实现原理,知其然还要知其所以然。从多线程核心基础讲起,理解线程的风险,多种创建线程的方式;再到深入理解线程的状态;然后是线程的基本操作。系统、深入、快速上手实现线程。 课程目标:    快速上手掌握Java多线程的经典课程,    系统、全面、深入掌握Java多线程的核心知识讲老师:CC老师     20年Java开发和使用经验,多年的首席架构师和CTO,畅销原创书籍《研磨设计模式》的作者。         参与和领导了上百个大中型项目的设计和开发,在互联网应用系统架构、系统设计、    应用级框架和中件开发等方面具有很多经验和领悟。    更为难得的是,入行20年,仍然奋战在技术一线,深知一线架构师需要掌握哪些技术、    掌握到什么程度、一线架构设计会遇到哪些坑、如何才能做出最合适的架构设计,经验最难得!适应人群:    想要系统、深入学习Java多线程    已有Java开发基础,想要快速掌握Java多线程    补充Java多线程知识,为进入一线大厂做准备学习方式:随到随学课程内容:第一节课:系统理解Java并发编程的知识体系    1:为什么要掌握Java并发编程    2:整个课程的目标    3:整个课程的学习内容第二节课:线程必备基础知识    1:理解线程是什么,理解进程,图示    2:理解轻量级的含义    3:理解时序调度,线程是时序调度的基本单元,图示    4:理解调度方式:抢占式,图示    5:理解我们写的程序基本都是多线程的应用,图示    6:理解并发和并行,图示    7:为什么需要线程第三节课:线程的风险    1:线程安全性问题,图示    2:线程的活跃度问题:死锁、饥饿、活锁,图示    3:线程的性能问题,这里要是线程切换 上下文的开销第四节课:创建线程的方式之一    1: 代码演示:实现Runnable接口的方式来创建线程    2:学习Thread类的方法和属性的应用    3:学习Thread类的源码第五节课:创建线程的方式之二    1:继承Thread的方式来创建线程    2:继续学习Thread类的源码,分析线程初始化过程    3: 代码演示:演示ThreadGroup    4: 代码演示:演示daemon线程,理解daemon线程线程的关系第六节课:创建线程的方式之三    1: 代码演示:匿名内部类的方式来创建线程    2:继续学习Thread类的源码,分析run方法的调用过程    3:代码演示:callable的方式来创建线程,带返回值    4: 学习FutureTask的部分源码,分析run方法到call方法的调用过程第七节课:线程状态详解    1:通过Thread源码来查看线程状态的定义    2:一步一步画图,讲述状态之的变迁第八节课:线程的基本操作sleep 和yield    1:阅读Thread源码    2:代码演示:sleep的使用    3:代码演示:yield的使用    4:sleep和yield的对比理解第九节课:线程的基本操作join和interrupt    1:阅读Thread源码    2:代码演示:join的使用    3:代码演示:interrupt的使用这里是《Java并发编程与源码分析》的第一部分——讲述多线程核心基础实现快速上手多线程的经典之作   

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧