关于Qt::BlockingQueuedConnection非死锁的程序卡住

Qt::BlockingQueuedConnection如果sender和receiver运行于同一线程,会报错

Qt: Dead lock detected while activating a BlockingQueuedConnection: Sender is XXXX(0x1c2dd42ee50), receiver is YYYY(0x1b8baff600)

但发信号的线程和槽执行的线程是两个不同线程,虽然程序没有报错,但卡住不动,也不转圈。上下文如下:
UI线程,创建了对象Logic、对象Worker,均没有使用moveToThread;
Worker中定义处理函数Loop,通过QtConcurrent::runQFutureWatcher::setFuture将Loop扔到线程池运行;
Loop中调用了Logic的具体业务函数,Logic通过信号通知UI线程刷新状态;
为了确保UI线程已经响应完Logic的请求,将Logic的信号绑定为Qt::BlockingQueuedConnection类型,运行至emit signal处卡住

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值