c++ - Qt中不同线程中的对象同步

标签 c++ multithreading qt

现在在 Qt 中,我遇到了一个问题,我有 2 个线程,它们有 2 个不同的对象。这些对象不是 QObjects,因此它们不能使用信号/槽进行通信。第一个线程是主线程,第二个线程处于无限循环中,使用队列处理命令对象。

主线程必须等待处理线程完成请求。

如何在不使用全局互斥锁和等待条件的情况下同步两个不同的线程?

最佳答案

您可以使用互斥锁。每次从队列中拉出“请求”时锁定,并在每次要附加到队列时锁定。这样你可能有

像这样:

#include <QMutex>
#include <QWaitCondition>

class processingThread
{
public:
    void appendToQueue(Request req)
    {
       sync.lock();
       queue.append(req);
       sync.unlock();
       cond.wakeAll();            
    }

protected:
    void run()
    {
        while(1)
        {
           sync.lock();
           QWaitCondition wait(&sync);
           Request current = queue.takeFirst();

           // process request

           sync.unlock()
        }
    }

private:
    QList<Request> queue;
    QMutex sync;
    QWaitCondition cond;
};

您现在可以从任何线程调用 processingThread::appendToQueue 并同步数据。您可以使用此模式同步线程内的任何数据。请记住锁定对要同步的数据的任何访问。注意 QWaitCondition 只是为了让你的线程只在需要的时候工作

关于c++ - Qt中不同线程中的对象同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8682223/

相关文章:

c++ - 某些 CPU 上 std::atomic<T> 的内存排序

android - 向 Android 应用程序添加额外文件

c++ - 以编程方式调用 Snap/Aero 最大化

c++ - QTableView并设置指针位置

c++ - 如何正确调用 thiscall 函数,这是一个 mfc 控件

java - 安排常规任务而不扩展TimerTask?

c# - 发送多个并行 Web 请求

c# - 从文本框获取数据到数组

c++ - 如何创建在玩家在 opengl 中向上移动时不断更新的纹理墙?

c++ - 是否有可能让 getline() 函数接受 wistream&