gpt4 book ai didi

c++ - QThread 移动到线程。 QThread 中的同步

转载 作者:行者123 更新时间:2023-11-28 05:48:38 26 4
gpt4 key购买 nike

我想写一些必须在自己的线程中工作的类。我读过这篇文章:http://wiki.qt.io/Threads_Events_QObjects。它建议移动必须在自己的线程中工作的对象,例如:

TestClass tst;
QThread *thread = new QThread();
tst.moveToThread(thread);
thread->start();
QObject::connect(thread, SIGNAL(started()), &tst, SLOT(start()));

在 TestClass 的 slot 中,我放置了所有初始化程序。1. 我可以在 TestClass 的构造函数中移动到线程吗?喜欢:

TestClass::TestClass() {
QThread *thread = new QThread();
this->moveToThread(thread);
thread->start();
QObject::connect(thread, SIGNAL(started()), this, SLOT(start()));
}

之后该类的所有对象都将在自己的线程中工作。

  1. TestClass 中,我有私有(private)的 struct,它可以在两个线程中更改。我应该为此使用 mutex 还是使用信号/插槽:

    void TestClass::changeStruct(int newValue) {
    // invoked in main thread

    emit this->changeValue(newValue);

    }

    // slot
    void TestClass::changeStructSlot(int newValue) {
    // this slot will be invoked in the second thread
    this._struct.val = newValue;
    }

最佳答案

  1. 至少从设计的角度来看,我不会这样做。在 TestClass 应该做的事情之上,您尝试添加内部线程管理。此外,由于线程管理,TestClass 析构函数会变得有点复杂。

  2. 每个 TestClass 对象都有自己的 struct。如果来自主线程的调用是更改 val 的唯一方法,则无需执行任何操作。如果 val 可以从超过 1 个线程(包括它自己的线程)更改,则使用 QMutex

关于c++ - QThread 移动到线程。 QThread 中的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35728160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com