c++ - Qt:移动到线程

标签 c++ multithreading qt

假设我有:

Class A{
Q_Object

public:
A::A(){};
void A::init(){obj = new myQobject();}
myQobject* obj;
}

然后如果类 A 像这样使用:

QThread *workerthread = new QThread;
A *worker = new A();
worker->moveToThread(workerthread);
workerthread->start();
worker->init();

那么 myQobject obj 将存在于哪个线程中?主线程还是辅助线程?

最佳答案

它将存在于主线程中,因为您正在从主线程调用 worker->init()。您可以使用信号和槽从工作线程调用 init,或者使用 QMetaObject::invokeMethod使用排队的连接 (您不必指定它,因为它将默认使用 Qt::AutoConnection 并且将使用 Qt::QueuedConnection 如果invokeMethod 从与接收对象不同的线程调用)

QMetaObject::invokeMethod(worker, "init",
                       Qt::QueuedConnection);

您还可以在构造函数中创建myObject 并将this 设置为父对象。然后当你调用moveToThread , 该对象也会将其子对象移动到同一个线程。

QObject::moveToThread:Changes the thread affinity for this object and its children.

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

相关文章:

c++ - 如何在 QA 计算机上捕获堆栈跟踪

c++ - QTimeEdit 当分钟增加时如何增加到下一小时?

c++ - 一段时间后Qt框架消失

c++ - 通过检测当前 'this' 对象类型在 C++ 中进行类型转换

模板参数中的 C++ 智能指针

c++ - 字符串 'G' 未显示

c++ - 在指针转换期间初始化?

java - 线程和线程池的区别

Java "unstopped "执行/完成线程

c++ - 多线程和互斥锁的竞争条件