我练习Qt(5.5)线程。在下面的示例中,消息排队/出队的顺序非常重要。我的想法是创建一个ProducerThread intance,向一个不同类的成员初始化。通过此成员,将对ProducerThread::enqueRecord
进行调用,以便将消息排入ProducerThread的Qt类型为QQueue
的成员队列。
我有以下两个问题:
(1)我正在考虑通过使用QReadWriteLock
来确保消息排队/出队的顺序。这是推荐的方法吗?
(2)我不确定是否在主应用程序的线程或ProducerThread上执行了对enqueueRecord的调用。如上所述,我正在考虑创建一个使用ProducerThread实例初始化一个类成员,然后我将通过该成员调用对enqueueRecord方法的make调用。
ProducerThread::ProducerThread(QObject *parent):
_parent(parent)
_running(false);
{
//..
}
ProducerThread::~ProducerThread()
{
//..
}
void ProducerThread::enqueueRecord(QString record)
{
queue.enqueue();
if (!_running) {
start();
}
}
ProducerThread::run()
{
_running = true;
while (!recordQueue.isEmpty()) {
qDebug() << recordQueue.dequeue(); // TODO
QThread::msleep(1000);
}
_running = false;
}