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