QT中一种隐蔽的死锁

造成死锁的情况只有两种:
1.单线程死锁:同一线程对同一个锁连续加锁两次会造成死锁;
延伸:在同一个线程中,一个事件分支中对锁A已经加锁,并且引用了QCoreApplication::processEvents(QEventLoop::AllEvents, 100)或者QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents, 100);另外一个timeEvent如果也对锁A加锁,那么在事件结构进行的时候锁A被同时加锁两次,造成死锁。
这里有个小的知识点:QEventLoop::ExcludeUserInputEvents无法阻止超时事件但可以阻止用户输入事件。
这种情况如何避免:timeEvent改为子线程,增加一个线程。
2.多线程死锁:
尝尝由于加了2把以上的锁造成,需要注意加锁解锁的顺序,按照1221的顺序去加锁解锁。
所以锁的最好形式是一个线程一把锁,避免在timeEvent中加锁!

#include 
#include <

你可能感兴趣的:(VS+QT,qt,开发语言)