由于QList不是线程安全的数据结构
于是偿试做了以下的改动,暂时没有问题重现
【忽略语法问题】
class QserialProcess:QThread
{
QList<int> dataQueue;
bool hasInsertCMD = false;
QMutex mutex;
void QserialProcess::run()
{
while (1)
{
// 1. do something
msleep(50);
if (hasInsertCMD)
{
msleep(50);
QMutexLocker lock(&mutex);
while (dataQueue.count > 0)
{
int tmpData = dataQueue.at(0);
// 2. process dataQuece
dataQueue.RemoveAt(0);
}
hasInsertCMD = false;
lock.mutex().unlock();
}
}
}
bool QserialProcess::InsertData(int data)
{
QMutexLocker lock(&mutex);
hasInsertCMD = true;
dataQueue.append(data);
lock.mutex().unlock();
}
};