我在QThreads newbee和问题,我是可疑的删除对象时,程序finishes.My程序具有从Qobject派生的类:删除对象完成
class My_application: public QCoreApplication{
....
....
};
class My_Class: public QObject{
...
...
};
void My_Class::process{
QTimer timer=new QTimer();
timer->setInterval(time);
connect(timer,SIGNAL(timeout()),this,SLOT(dowork()));
timer->start();
}
My_application::My_application:QCoreApplication{
my_class=new My_Class();
QThread thread=new QThread();
my_class->moveToThread(thread);
connect(thread,SIGNAL(started()),my_class,SLOT(process())) ;
connect(my_class,SIGNAL(finished()),thread,SLOT(quit())) ;
connect(thread,SIGNAL(finished()),thread,SLOT(deletelater())) ;
connect(my_class,SIGNAL(finished()),my_class,SLOT(deletelater())) ;
}
void My_Class::dowork(){
//here doing the work with timer elapsed.Doing work with some buffer and send data
//
}
如果我停止了我的程序我发现有些对象没有被正确删除,我的程序在重新启动时无法正常工作。事实上,我对Qt线程并不熟悉,我想知道什么时候My_Class的析构函数会被调用?我做错了什么?
不确定,但你可以使用deleteLater()与你的线程connect(workerThread,SIGNAL(finished()),worker,SLOT(deleteLater()));并谨慎用deleteLater()作为参考。 http://stackoverflow.com/questions/9632989/qobjectdeletelater-across-a-qthread – Wagmare
你的课程是否包含'完成'信号?你在哪里发射它? –
呃,至少['QThread :: finished()'signal](https://qt-project.org/doc/qt-5.0/qtcore/qthread.html#finished)连接到'deleteLater()'是当他们的线程完成时删除对象的规范方法,所以你做对了,我会删除其他'deleteLater()'连接,以保持整洁。 – hyde