假设我有:
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/