Qt::BlockingQueuedConnection如果sender和receiver运行于同一线程,会报错
Qt: Dead lock detected while activating a BlockingQueuedConnection: Sender is XXXX(0x1c2dd42ee50), receiver is YYYY(0x1b8baff600)文章来源:https://www.toymoban.com/news/detail-569131.html
但发信号的线程和槽执行的线程是两个不同线程,虽然程序没有报错,但卡住不动,也不转圈。上下文如下:
UI线程,创建了对象Logic、对象Worker,均没有使用moveToThread;
Worker中定义处理函数Loop,通过QtConcurrent::run
和QFutureWatcher::setFuture
将Loop扔到线程池运行;
Loop中调用了Logic的具体业务函数,Logic通过信号通知UI线程刷新状态;
为了确保UI线程已经响应完Logic的请求,将Logic的信号绑定为Qt::BlockingQueuedConnection类型,运行至emit signal处卡住文章来源地址https://www.toymoban.com/news/detail-569131.html
到了这里,关于关于Qt::BlockingQueuedConnection非死锁的程序卡住的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!