Dequeue总是失败,队列总是空的

时间:2013-04-21 08:33:51

标签: qt qt4

我不知道我的代码到底是什么问题,它永远不会排队队列,而isEmpty总是符合真实。

class ConcurrentQueue
{
private:
QQueue<QByteArray> dataStore;

public:

void Enqueue(QByteArray value);
QByteArray Dequeue();

bool isEmpty();
private:
QMutex mutex;
};

void ConcurrentQueue::Enqueue(QByteArray value)
{
qDebug() << dataStore.length();
mutex.lock();
dataStore.enqueue(value);
mutex.unlock();
qDebug() << dataStore.length();
}

QByteArray ConcurrentQueue::Dequeue()
{

// mutex.lock();
// return dataStore.dequeue();
// mutex.unlock();

QByteArray tmp;

mutex.lock();

if(!dataStore.isEmpty())
{
tmp = dataStore.dequeue();
}

mutex.unlock();

return tmp;
}

bool ConcurrentQueue::isEmpty()
{
return dataStore.isEmpty();
}

接下来,一个定时器连接到一个插槽,每隔10毫秒就会对一个数据包进行Enqueu:

QByteArray built((char*)data, len) ;
//qDebug() << built.toHex();
qDebug() << "EnQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ";
queue.Enqueue(built);

线程会定期检查此队列是否为空,它会使队列出列并执行某些操作,但isEmplty始终返回true

if(queue.isEmpty())
{
qDebug() << "#####################################";
return;
}
//NEVER COMES HERE
QByteArray rd15Bytes = queue.Dequeue();

这是主题:

Write::Write()
{
}

void Write::run(){
while(1)
{
rs.writeToSerialPort(); // in this function above always isemplty is true

this->msleep(10);
}
}

0 个答案:

没有答案