Программирование Qt — QtConcurrence kill thread

Я использую 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;
}
}

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]