社区
Qt
帖子详情
一个关于不同线程对象间的通信问题... ...
suuare
2019-12-23 02:41:52
最近搞一个项目,很多地方用到并发处理,所以程序中有很多线程。同时采用了观察者模式用于通知主线程以更新图形化显示。按照QThread的用法,从QObject继承的对象调用moveToThread就可以使之存在于一个独立线程中,问题是被观察者调用notify函数时是间接调用了观察者的update,而被观察者于观察者有可能不在同一个线程中,这样直接调用会不会出问题呢?虽然程序运行看起来没啥问题,但还是觉得不放心,欢迎讨论!
...全文
474
4
打赏
收藏
一个关于不同线程对象间的通信问题... ...
最近搞一个项目,很多地方用到并发处理,所以程序中有很多线程。同时采用了观察者模式用于通知主线程以更新图形化显示。按照QThread的用法,从QObject继承的对象调用moveToThread就可以使之存在于一个独立线程中,问题是被观察者调用notify函数时是间接调用了观察者的update,而被观察者于观察者有可能不在同一个线程中,这样直接调用会不会出问题呢?虽然程序运行看起来没啥问题,但还是觉得不放心,欢迎讨论!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
比菜鸟还菜
2020-01-14
打赏
举报
回复
观察者模式的本质还是类指针的调用。跨线程时类指针被调用函数是处于调用者的线程,当多个线程读写该类的资源,一样有崩溃的问题出现。建议在被观察者的通知函数中加上队列信号,把信号发到被观察者本身的线程再进行操作。
King_zkk
2020-01-13
打赏
举报
回复
理解一下观察者模式的本质就知道没有问题了,观察者模式其实是object之间的函数回调,能register说明这些对象是线程间共享的。信号与槽本质也是差不多。鄙人理解如此,只做讨论交流
lwydezh
2019-12-30
打赏
举报
回复
同意1楼,在Qt多线程下,推荐采用signal-slot的通信方式。
donwmufromdying
2019-12-24
打赏
举报
回复
moveToThread只是让该对象挪入到目标线程内,目标线程对象需要start后才真正线程启动自己的event loop。此时最好是使用signal-slot来进行跨线程调用
Qt下实现
不同
线程
间
的
通信
Qt中可以实现
对象
与
对象
之
间
的
通信
,通过信号与槽来实现,我们今天来实现
不同
线程
之
间
的
通信
:1.定义
一个
继承于Q0bject的Task类,在Task类中定义
一个
槽slot函数slotTaskA()和slotTaskB(),函数中定义
线程
需要做的工作。2、在要使用
线程
的mainWindow类中,新建
一个
Task类
对象
,使用moveToThread(方法将Task
对象
的事件循环全部交由QThread
对象
处理。3.建立相关的信号函数和槽函数进行连接,然后发出信号触发QThread的槽函数,使其执行工作。
c语言
线程
通信
方式,
线程
间
通信
及同步方法介绍
线程
间
如何
通信
/同步?此前小编给大家介绍了进程
间
通信
的方法,于是一些伙伴又好奇
线程
间
的
通信
及同步方法,没关系,下面小编就继续给大家科普下
线程
间
通信
及同步的方法。
线程
间
通信
及同步方法介绍:一、
线程
间
的
通信
方式1、使用全局变量主要由于多个
线程
可能更改全局变量,因此全局变量最好声明为volatile。2、使用消息实现
通信
在Windows程序设计中,每
一个
线程
都可以拥有自己的消息队列(UI
线程
默认自带消息...
线程
间
的
通信
方法
线程
间
的
通信
方法 1.
线程
通信
简介 一般而言,在
一个
应用程序(即进程)中,
一个
线程
往往不是孤立存在的,常常需要和其它
线程
通信
,以执行特定的任务。如主
线程
和次
线程
,次
线程
与次
线程
,工作
线程
和用户界面
线程
等。这样,
线程
与
线程
间
必定有
一个
信息传递的渠道。这种
线程
间
的
通信
不但是难以避免的,而且在多
线程
编程中也是复杂和频繁的。
线程
间
的
通信
涉及到4个
问题
:
线程
间
如何传递信息;
线程
之
间
如何同步,以...
线程
间
的
通信
线程
间
的
通信
1.
线程
之
间
的
通信
简介 一般而言,在
一个
应用程序中(即进程),
一个
线程
往往不是孤立存在的,常常需要和其它
线程
通信
,以执行特定的任务。如主
线程
和次
线程
,次
线程
与次
线程
,工作
线程
和用户界面
线程
等。这样,
线程
与
线程
间
必定有
一个
信息传递的渠道。这种
线程
间
的
通信
不但是难以避免的,而且在多
线程
编程中也是复杂和频繁的。
线程
间
的
通信
涉及到4个
问题
: (1)
线程
间
如何传递信息 (2)
线程
线程
间
通信
的几种实现方式
线程
间
通信
的几种实现方式 首先,要短信
线程
间
通信
的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。我们来基本一道面试常见的题目来分析: 题目:有两个
线程
A、B,A
线程
向
一个
集合里面依次添加元素"abc"字符串,一共添加十次,当添加到第五次的时候,希望B
线程
能够收到A
线程
的通知,然后B
线程
执行相关的业务操作。 方式一:使用 volatile 关键字 基于 volatile...
Qt
16,233
社区成员
26,639
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章