0

我使用 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;
        }
}
4

1 回答 1

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
}
于 2014-02-19T12:56:51.120 回答