在主线程中调用 readValue() 函数会试图锁定一个互斥量,而QMutexLoker 的构造函数接受一个互斥量作为参数并将其锁定,QMutexLoker 的析构函数则将此互斥量解锁,会自动地锁定和解锁互斥锁(QMutex) ,问题是在run()函数中什么时机解锁了互斥量
bool QDiceThread::readValue(int *seq, int *diceValue)
{
if (mutex.tryLock())
{
*seq=m_seq;
*diceValue=m_diceValue;
mutex.unlock();
return true;
}
else
return false;
}
void QDiceThread::run()
{
m_stop=false;//启动线程时令m_stop=false
m_seq=0;
qsrand(QTime::currentTime().msec());//随机数初始化,qsrand是线程安全的
while(!m_stop)//循环主体
{
if (!m_paused)
{
// mutex.lock();
QMutexLocker Locker(&mutex);
m_diceValue=qrand(); //获取随机数
m_diceValue=(m_diceValue % 6)+1;
m_seq++;
// mutex.unlock();
}
msleep(500); //线程休眠100ms
}
}