找回密码
 立即注册
收起左侧

信号槽进行线程同步时与线程的join有冲突,造成死锁

2
回复
7797
查看
[复制链接]
累计签到:3 天
连续签到:1 天
来源: 2018-7-20 13:56:38 显示全部楼层 |阅读模式
1Qter豆
//A是个纯虚函数导出的dll,大概实现方式
class A
{
...
thread thd(thread_func);//内部线程,发送数据的

release(){
thd.join();//A退出的时候需要release,此时要join线程
}
...
thread_func()
{
send_data();//发送数据
}
}

send_data是暴露给我的,我在里面使用了qt的信号槽同步数据
connect(..., blockqueueconnect);//blockqueueconnect连接

在mainwindow里面响应这个数据,刷新UI

问题是,当我点击关闭的时候,需要调用A的release()函数,此时线程thread_func有可能同时来了数据,
于是就阻塞等待刷新UI后才返回。但是主进程此时却在等待A的线程退出。这样就造成了死锁。
这个问题应该怎么解决呢?信号槽是个好东西,不想抛弃。

回复

使用道具 举报

累计签到:18 天
连续签到:1 天
2018-7-21 00:46:46 显示全部楼层
添加QMutex这个类看。互斥一下。
回复

使用道具 举报

累计签到:120 天
连续签到:1 天
2018-7-21 09:01:19 显示全部楼层
QT有自己的线程实现方式,为何用C++的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了