QThread错误分析总结

错误一】ASSERT failure in QCoreApplication::sendEvent: “Cannot send events to objects owned by a different thread. Current thread 2c3fef98. Receiver ‘’ (of type ‘Pictures’) was created in thread 2e2a7d98”,

原因分析:
postEvent: 可以给别的线程发送事件。事件会在目的对象所属的线程中运行。这是一个异步接口。
sendEvent: 仅用于同一个线程之间发送事件。目的对象必须与当前线程一样。这是一个同步接口。假如发送给属于另一个线程的对象,会报错:
object不在movetothread 上的object实例化的话,直接movetothread就会出现这个错误。

错误二】QObject::moveToThread: Current thread (0x324031a8) is not the object’s thread (0x2c36ef98).Cannot move to target thread (0x324031a8)

原因分析:
在Qt中,如果要切换对象的线程,不能到了目标线程里再调用moveToThread,此举会导致切换线程失败

错误三】QObject::~QObject: Timers cannot be stopped from another thread

原因分析:
1、 不能夸线程启动定时器和停止定时器
2、 不能夸线程启动一个定时器关联的对象,但在另一个线程释放(析构)此和定时器关联的对象(相当于1>的情况不能在其他线程停止定时器).

不一定与定时器有关,在开始线程的时候实例化一个对象QOject,加了(this),但是打印完成,这线程就结束了,所以在关闭软件的时候,去DELETE 子线程的QOject,就报这个错。

错误四】QObject: Cannot create children for a parent that is in a different thread.
(Parent is QAxObject(0x34143e90), parent’s thread is QThread(0x2beeef98), current thread is QThread(0x320709e0)

原因分析:
使用线程的时候。传递一个在UI线程实例化了的对象QAxObject进来并运用

错误五】QObject::moveToThread: Cannot move objects with a parent
m_dialog = new Dialog( this );
->moveToThread( m_runThread );

解决方法:
去掉this

错误六】QObject::moveToThread: Widgets cannot be moved to a new thread

原因分析:
只有继承QOject才能moveToThread

错误七】程序崩掉提示QThread: Destroyed while thread is still running

原因分析:
线程未结束就delete线程类

解决办法:
在继承QThread的类的析构函数中添加 wait();quit();

你可能感兴趣的:(QT,C++,qt,thread,object,c++,exception)