最近调试一个项目,发现任务在多线程执行时,每次退出程序会出现标题中的错误,出错代码如下:
//线程池
PoolManager* manager = new PoolManager(folder_path, max_thread.toInt(), startPage, endPage);
manager->moveToThread(&worker_thread_);
connect(manager, &PoolManager::new_progress, this, &KonachanCollecter::update_progress);
worker_thread_.start();
manager->add_new_task("https://konachan.com/post?tags=" + tags);
出错信息:
发生了快速异常检测失败,将不会调用异常处理程序!
而不使用多线程时,程序正常退出,比如注释掉下面两行!
//线程池
PoolManager* manager = new PoolManager(folder_path, max_thread.toInt(), startPage, endPage);
//manager->moveToThread(&worker_thread_);
connect(manager, &PoolManager::new_progress, this, &KonachanCollecter::update_progress);
//worker_thread_.start();
manager->add_new_task("https://konachan.com/post?tags=" + tags);
结合出错的位置,我猜想是线程没有正常退出造成的,于是在析构函数中加入了如下代码:
//author:autumoon
//联系QQ:4589968
//日期:2021-04-23
//加上这句话,避免线程异常退出
if (worker_thread_.isRunning())
{
worker_thread_.quit();
worker_thread_.wait();
}
问题得到解决!
网上搜索发现出现此错误提示的原因很多,比如变量未初始化也可能造成此问题,所以需要通过注释代码的方式,逐步找到问题的所在。