最近一直做一个电力系统相关的项目,这里会用到多线程去发送召唤离线文件的命令,每一个线程会处理召唤离线文件的任务。
我在测试中发现如果我召唤的时间间隔跨度比较大的话耗时会比较的长,那么任务还在召唤的过程中客户就突然关闭掉了界面程序,这时程序会报错(linux出现core文件)。
以上的问题如何处理呢?
我在这里会定义一个容器,这个容易是专门放置线程的。
QList<CSendMessThread*> m_csendmssList;
说明一下这里的CSendMessThread是继承于QThread的对象。
将所有的线程都放置在m_csendmssList中。
然后QMainWindow中有个关闭接口closeEvent(QCloseEvent *event),只需要在这个接口中重新实现一下就可以了。
for(int i = 0; i < m_csendmsslist.size(); i++)
{
if(m_csendmsslist[i]->isRunning())
{
m_csendmsslist[i]->terminate();
m_csendmsslist[i]->wait();
}
}