【发布时间】:2018-06-27 13:48:37
【问题描述】:
我在后台使用 QThread 执行一些大型任务,这里是示例 我正在使用的代码
class Worker : public QObject
{
Q_OBJECT
QThread workerThread;
public slots:
void doWork(const QString ¶meter) {
while(1){
// some huge code here
......................
if(condition) break;
}
emit resultReady(result);
}
signals:
void resultReady(const QString &result);
};
class Controller : public QObject
{
Q_OBJECT
QThread workerThread;
public:
Controller() {
Worker *worker = new Worker;
worker->moveToThread(&workerThread);
connect(&workerThread, SIGNAL(finished()), worker, SLOT(deleteLater()));
connect(this, SIGNAL(operate(QString)), worker, SLOT(doWork(QString)));
connect(worker, SIGNAL(resultReady(QString)), this, SLOT(handleResults(QString)));
workerThread.start();
}
~Controller() {
workerThread.quit();
workerThread.wait();
}
public slots:
void handleResults(const QString &);
signals:
void operate(const QString &);
};
上面的程序退出后是否推荐使用wait()?
我的程序有时卡在QThread::wait(),它正在从服务器下载巨大的文件,再次检查while条件大约需要5-6分钟,我只想退出线程但主线程卡在wait(),有没有大大地??在不崩溃或挂起主应用程序的情况下强行退出或终止线程?我也试过QThread::terminated,但它从来没有用过。
任何帮助表示赞赏。
谢谢。
【问题讨论】:
-
你试过调试你的线程函数吗?可以暂停一个进程并观察现在执行的代码。
-
是的,它永远不会退出 while 循环 @DmitrySazonov
-
那么,问题解决了吗?
标签: c++ multithreading qt qt4 qthread