如何在Qt C ++中终止一个线程

时间:2013-04-23 09:03:04

标签: qt progress-bar qthread

我已经使用QFuture为我已经在代码中使用的函数启动了一个线程,这个函数需要很长时间才能冻结我的GUI。

线程似乎正常工作:

QFuture<int> result = QtConcurrent::run(&m_DC, &DatabaseController::getAll);

然而,当getAll函数结束时,我认为这个线程仍在运行,它应该不是,但我不知道如何结束或完成它。我查看了文档,但它并没有真正说清楚。

基本上我在线程启动时显示进度条为忙,并希望在结束时隐藏它

if(result.isRunning())
{
    ui->progressBar->setRange(0,0);
    ui->progressBar->show();
}

if(result.isFinished())
{
    ui->progressBar->hide();
}

1 个答案:

答案 0 :(得分:0)

使用QFutureWatcher监视QtConcurrent :: Run返回的QFuture,将QFutureWatcher :: finished连接到一个插槽以包装progressBar的显示。像

这样的东西
connect(&job_watcher_,
        SIGNAL(finished()),
        SLOT(endLengthyJob()));

MainWindow.cpp

void MainWindow::endLengthyJob()
{
    ui->progress_bar->hide();
} // end_slot(MainWindow::endLengthyJob)

附注:QtConcurrent :: Run生成的线程无法终止。