почему QFuture :: isFinished () заканчивается рано? - PullRequest
0 голосов
/ 10 марта 2020

У меня вопрос, я пытаюсь найти самый простой способ (без eventl oop и или QFutureWatcher) запустить функцию в другом потоке, не блокируя gui. У меня есть объект экспортера из другой библиотеки, я не могу его изменить, и его функция Close () закрывается примерно за 15 секунд.

Так что я попробовал этот трюк ниже, но он работает только в течение нескольких секунд, но затем функциональные блоки processEvents () до завершения функции экспорта, что делает ее бесполезной.

Мой код:

QFuture<void> future = QtConcurrent::run([&]() {exporter.Close(); 
                        qDebug() << "closed!";});

                    while (!future.isFinished())
                    {       
                        QApplication::processEvents();
                        QThread::msleep(1); //yield
                        qDebug() << "z";
                    }
...