在我的代码中,工作线程向 gui 线程发出信号。Signal 和 Slot 通过 Qt::BlockingQueuedConnection 连接。
当closeEvent
应用程序在尝试停止工作线程时,才完成事件。
它调用工作线程的函数:
void stop() {
_isFinished = true;
wait();
}
工作线程依次检查_isFinished
条件,如果未设置,则发出信号。
成像以下情况
The worker Gui Thread
================= =================
if (!_isFinished) -----------------
----------------- _isFinished = true;
----------------- wait();
emit mySignal(); -----------------
显然,两个线程都会被锁定——死锁。
如果我添加一个互斥锁,那么您会发现另一个死锁情况。当工作人员锁定互斥锁时,gui线程将被阻塞。结果,发出的信号将锁定工作人员。
我该如何处理?