Qt编程 - QtConcurrence杀死线程

时间:2014-02-19 11:09:40

标签: c++ multithreading qt qtconcurrent

我使用QtConcurrence在一个单独的线程中运行一个函数,但我想停止,暂停或终止这个线程,但我不能。我读到了这个:

  

请注意,QtConcurrent :: run()返回的QFuture不支持   取消,暂停或进度报告。 QFuture返回了可以   仅用于查询运行/完成状态和返回   功能的价值。

我能以其他方式这样做吗?

我的功能是:

void MainWindow::on_imprimirButton_clicked()
{
        if(filename.length() == 0){
            ui->consolaBrowser->append("Error. Debe seleccionar un fichero.");
        }else if(!filename.contains(".txt")){
            ui->consolaBrowser->append("Fichero erroneo. Debe seleccionar un archivo de tipo G-CODE.");
        }else{

            imprimiendo=1;

            *future= QtConcurrent::run(Imprimir,filename.toUtf8().data());

            imprimiendo=0;
        }
}

1 个答案:

答案 0 :(得分:1)

我认为QtConcurrence解决方案并不是很好。它经常被建议,但没有优于使用线程库(例如QThread)的良好实现。下面的示例显示了一种停止线程的可能性。如果在主程序中的某处设置变量m_bBreak为true,则线程会停止。以类似的方式,您也可以获得当前的线程进度。

int foo(bool* bStopper) {
  if(*bStopper)
    return 0;

  // Do code here

  return 1;
}

void QThread::run() {
  m_iErrors = foo(&m_bBreak);
  // Handle errors
}