唤醒线程:
class Worker : public QThread
{
void run()
{
qDebug()<<"in work thread";
MainWindow::mutex.lock();
qDebug()<<"begin wake";
MainWindow::con.wakeAll();
MainWindow::mutex.unlock();
}
};
主线程:
Worker wt;
mutex.lock();
wt.start();
Sleep(1000);
qDebug()<<"main wait";
con.wait(&mutex);
qDebug()<<"main unwait";
mutex.unlock();
qDebug()<<"main unlock";
稳定输出:
in work thread
main wait
begin wake
main unwait
main unlock
总结: con.wait(&mutex)会释放锁,其所在的线程等待被唤醒, 其他的线程此时可以抢占锁,经测试,等待被唤醒后会重新持有锁,所以mutex.unlock()操作是必要的。