【发布时间】:2013-05-07 11:40:54
【问题描述】:
我正面临一个小(也许不是)问题。我有一个解析 XML 文件的函数(非常大的 xml ~1Gb),所以它需要很多时间(完成函数需要 5-6 分钟)。由于已知问题,我不想在 GUI 线程中使用它(主窗口冻结并且没有发生任何事情,所以用户认为一切都出错了)。我试图通过使用来解决这个问题
QtConcurrent::run
但又出现了一个问题:如果用户按下 X(右上角的关闭按钮)主 GUI 线程关闭,但我的 QtConcurrent::run 生成的子线程继续他的工作,我只能通过任务管理器。
我决定使用 QThread 代替 QtConcurrent::run6 但我不明白如何运行 MainWindow 类函数:
void MainWindow::parseXML()
我尝试过这样创造:
class pThread : public QThread
{
Q_OBJECT
private:
void run();
};
void pThread::run(){
MainWindow::parseXML();
}
但是当我尝试编译时出现错误:
cannot call member function 'void MainWindow::parseXML()' without object
另外,不知道能不能通过这个方法更新GUI-thread(parseXML函数改变statusBar)
我该怎么办?
【问题讨论】:
标签: multithreading qt thread-safety terminate qthread