调用 quit() 后清理 QThread
Posted
技术标签:
【中文标题】调用 quit() 后清理 QThread【英文标题】:Clean up QThread after calling quit() 【发布时间】:2010-08-16 07:32:11 【问题描述】:我有问题。如果我调用 Abort(),运行函数将返回,而 complexMath 实例没有足够的时间进行清理。
我想要的是,在调用 Abort() 之后,complexMath 实例有足够的时间自行关闭,在返回之前清除所有待处理的信号和槽(在 complexMath 内部,它也有自己的信号和槽)。
void MyThread::Go()
start();
void MyThread::Abort()
emit stopNow();
quit();
void MyThread::run()
ComplexMath * complexMath = new ComplexMath();
connect( complexMath, SIGNAL(OnCalculation(qint)), this, SLOTS(PartialOutput(qint)) );
connect( this, SIGNAL(stopNow()), complexMath, SLOTS(deleteLater());
exec();
void MyThread::PartialOutput(qint data)
qDebug() << data;
谢谢!
【问题讨论】:
【参考方案1】:我认为你可以摆脱 stopNow 信号:
void MyThread::Abort()
quit();
void MyThread::run()
ComplexMath * complexMath = new ComplexMath();
connect( complexMath, SIGNAL(OnCalculation(qint)), this, SLOTS(PartialOutput(qint)) );
exec();
// Any code here will be run after the thread quits, and the event loop stops
deleteLater();
【讨论】:
以上是关于调用 quit() 后清理 QThread的主要内容,如果未能解决你的问题,请参考以下文章
终止python程序的正确方法,无论调用位置如何,并进行清理
QT事件循环与QThread类的关闭quit(),wait()
调用 SDL_Quit() 时“停止工作”的基本 SDL2 代码
Selenium:如何在不调用 driver.quit() 的情况下停止影响 PC 内存的 geckodriver 进程?