Qt线程,确保消息队列/出队顺序和理解线程空间

时间:2016-09-21 15:11:14

标签: c++ multithreading qt

我练习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;
}

0 个答案:

没有答案