门户
书籍
教程
论坛
问答
下载
签到
个人空间
帐号
自动登录
找回密码
密码
登录
立即注册
账号
自动登录
找回密码
密码
登录
立即注册
请绘制轨迹完成人机验证
由vaptcha提供技术支持
登录
注册
搜索
搜索
搜索
热搜
qml
quick
串口
输入中文
数据库
arm
百度地图
qt聊天
QT安装
安装
多窗口
中文乱码
聊天
局域网
鼠标
QT
图片
乱码
rs485通讯
多线程
android
多文档编辑器
本版
用户
本版
用户
【HUX】问题互助平台
博客
动态
好友
帖子
收藏
道具
勋章
任务
淘帖
动态
日志
相册
分享
记录
留言板
群组
门户
导读
排行榜
设置
我的收藏
退出
Qt开源社区
›
精华区(请在“有问必答”发帖)
›
有问必答
›
数据处理
›
信号与槽连接的第五个参数和多线程的问题 ...
发布主题
返回列表
信号与槽连接的第五个参数和多线程的问题
1
回复
6817
查看
[复制链接]
hitszjia
当前离线
积分
7
hitszjia
尚未签到
来源:
2021-8-31 22:28:22
显示全部楼层
|
阅读模式
2
Qter豆
信号与槽connect第五个参数代表槽函数在哪个线程中执行 :
1)自动连接(AutoConnection),默认的连接方式,如果信号与槽,也就是发送者与接受者在同一线程,等同于直接连接;如果发送者与接受者处在不同线程,等同于队列连接。
2)直接连接(DirectConnection),当信号发射时,槽函数立即直接调用。无论槽函数所属对象在哪个线程,槽函数总在发送者所在线程执行,即槽函数和信号发送者在同一线程
3)队列连接(QueuedConnection),当控制权回到接受者所在线程的事件循环时,槽函数被调用。槽函数在接受者所在线程执行,即槽函数与信号接受者在同一线程
目前见到的资料都是这么写的,有些疑问?
问题1:假设两个信号A、B及触发的槽函数SlotA、SlotB均在主线程中,SlotA在执行的过程中,B信号发出了,我理解此时应该是把SlotA执行完,再去执行SlotB,但是默认不写连接方式应该是直接连接(DirectConnection),应该是B信号发出,立即执行SlotB,此时有些凌乱了。
问题2:两个线程间的信号与槽默认采用队列连接(QueuedConnection),很多资料上写如果强制采用直接连接(DirectConnection),容易出现程序崩溃问题,个人感觉也没什么问题啊,什么场景下容易出现程序崩溃呢。
望高手帮忙解解惑,不胜感激!
我来回答
回复
使用道具
举报
Since
当前离线
积分
837
Since
累计签到:742 天
连续签到:1 天
2021-9-13 11:36:48
显示全部楼层
本帖最后由 Since 于 2021-9-13 11:40 编辑
1、A、B 信号在一个线程,如果 A 没有执行完,B 是不会触发的,可以试着把 A 做成死循环看看.
2、不同线程如果直连,槽函数的栈是不一样的有些变量就容易找不到,另外就是有些一些变量,类似 QTcpSocket、QProcess 无法跨线程,如果直连,也会出错.
回复
使用道具
举报
返回列表
发表新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满)
我知道了