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::run
和QFutureWatcher::setFuture
将Loop扔到线程池运行;
Loop中调用了Logic的具体业务函数,Logic通过信号通知UI线程刷新状态;
为了确保UI线程已经响应完Logic的请求,将Logic的信号绑定为Qt::BlockingQueuedConnection类型,运行至emit signal处卡住