Я использую QtConcurrence для запуска функции в отдельном потоке, но я хочу остановить, приостановить или убить этот поток, но не могу. Я прочитал это:
Обратите внимание, что QFuture, возвращаемое QtConcurrent :: run (), не поддерживает
отмена, приостановка или отчет о проделанной работе. 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;
}
}
Я думаю, что решение 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
}
Других решений пока нет …