QThread多线程踩坑记录。
1.QObject: Cannot create children for a parent that is in a different thread.
如上错误信息。一般在执行QObject::moveToThread
后的对象运行时发生。原因是:线程中有对象的创建与使用不在同一个线程。就比如说对象A的构造函数中new了一个对象B(A构造函数在主线程,所以B是在主线程创建的),但是在把对象A移动到一个新线程后,再使用对象A中的对象B就会出现上述错误信息。**总结:new和使用必须在同个线程**
因此还有一种出现情况:移动到新线程后的对象,应该使用信号/槽通讯,不应该直接调用槽函数,比如A->func()
。因为,直接调用槽函数会在该线程运行函数,而非对象A所在的线程。如果A.func()
中存在在A线程new的对象B(出现new B与使用B不在同个线程),根据上面的结论,提示出错。
如果弄不清楚线程的情况,可以使用qDebug()<<QThread::currentThreadId();
(header:
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment