1.要知道主窗口什么时候关闭
在widget.h新增下面的函数
private slots:
void closeEvent(QCloseEvent *event);
在widget.cpp新增
void Widget::closeEvent(QCloseEvent *event)
{
qDebug() << "关闭主窗口了!";
}
直接运行,关闭程序的时候就能看到Debug输出了。

2.关闭异步线程
异步线程的创建就不多说,反正线程任务一般是一个死循环。例如:
void infiniteLoopTask(void)
{
while (1)
{
/* 循环的任务 */
}
}
在widget.cpp定义一个全局变量
volatile bool start=1;//线程标志位
主窗口退出函数修改一下
void Widget::closeEvent(QCloseEvent *event)
{
qDebug() << "关闭主窗口了!";
start=0;//退出线程
}
线程修改为
void infiniteLoopTask(void)
{
while (1)
{
if(start==1)//标志位=1,循环执行耗时函数
{
/* 循环的任务 */
}
else//标志位=0,跳出循环,线程执行结束
{
break;
}
}
}
在Qt中,可以通过重载`closeEvent`函数来监听主窗口的关闭,并设置全局变量控制异步线程的退出。当主线程接收到关闭事件时,将线程标志位设为0,异步线程检测到该标志后会跳出循环,安全结束。
2497

被折叠的 条评论
为什么被折叠?



