假如这里有2个人,1个人写Qobject的类,一个人写主线程UI。好,我第一个人封装了一个Obj,他的构造函数是这样的:
ClassA::ClassA(QObject *parent) : QObject(parent)
{
ti = new QTimer(this);
ti->setInterval(1000);
connect(ti, SIGNAL(timeout()), this, SLOT(onTimeut()));
ti->start();
}
他觉得我自己的timer就是定时触发我一个槽函数,而且这个timer是我的,所以把timer的parent指向自己,这样子自己被析构的时候,会一起把timer也析构掉。析构函数都可以懒得写了,没问题。
另外一个人写主线程:
ClassA *a = new ClassA();
QThread *th = new QThread();
a->movetoThread(th);
th->start();
这个人不知道这个Class A里实现什么,他也不需要知道,只需要按照语法规则new a,然后后面delete a就对了,但是这样delete的时候,QTimer就是报错,QObject::killTimer: timers cannot be stopped from another thread。
哦对了,如果你觉得写主线程的人应该先退出子线程,那很可惜,你这么写一样报错。
th->quit();
th->wait();
th->deletelater();
delete a;
那么请问:2个人都觉得自己合情合理,没有问题,那到底是谁的问题?有什么通用的方法或者思想来避免这种问题。