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 など) を使用した優れた実装よりも利点はありません。以下のサンプルは、スレッドを停止する 1 つの可能性を示しています。メイン プログラムのどこかで変数 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 に答える