C++ Qt编程-Qt并发终止线程

C++ Qt编程-Qt并发终止线程,c++,multithreading,qt,qtconcurrent,C++,Multithreading,Qt,Qtconcurrent,我使用QtConcurrence在一个单独的线程中运行函数,但我想停止、暂停或终止这个线程,但我不能。我读到: 请注意,QtConcurrent::run()返回的QFuture不支持 取消、暂停或进度报告。未来返回的QF可以 仅用于查询运行/完成状态和退货 函数的值 我可以用其他方式做这个吗 我的职能是: void MainWindow::on_imprimirButton_clicked() { if(filename.length() == 0){

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

请注意,QtConcurrent::run()返回的QFuture不支持 取消、暂停或进度报告。未来返回的QF可以 仅用于查询运行/完成状态和退货 函数的值

我可以用其他方式做这个吗

我的职能是:

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;
        }
}

我认为QT并发解决方案不是很好。通常建议使用它,但与使用线程库(例如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
}

您永远不需要“杀死”线程。您只需要在某个地方设置一个标志,该标志会导致长时间运行的进程停止。您还可以将
qApp
properties设置为标志。不需要声明变量。你能举个例子吗?
qApp->setProperty(“myFlag”,true)
,检查
qApp->property(“myFlag”)。toBool()
,你必须
#包括
。如果你在GUI中设置了一个标志,那么一个潜在的外部函数应该如何停止执行?我给出了一个关于QThread的例子。在这里,您只需要重载run函数。但许多其他线程库的工作原理相同。