У меня проблема с дизайном, которая преследует меня довольно долгое время. По сути, у меня есть функция, которая требует много времени для выполнения и gui, которая должна быть отзывчивой и актуальной. Когда пользователь нажимает кнопку запуска, длинная функция начинает выполняться в цикле while, и после каждого выполнения gui необходимо обновить.Qt Thread Synchronization Design
Я думал, что лучший способ сделать это состоял в том, чтобы запустить QThread в цикле while, и если пользователь нажал кнопку запуска, начнет работать длинная функция. похожее на следующее:
class Application : public QThread
{
void run (void)
{
while (!mExiting)
{
if (StartPressed)
LongFunction();
// Need to update gui before
// running long function again
}
}
}
Я пытался делать QMetaObject :: Invoke с BlockingQueuedConnection Однако, когда приложение завершает работу графического интерфейса, поток застрянет и никогда не выходит. Я также попытался использовать QMutex, однако gui станет заблокированным, ожидая мьютекс, который заблокирован и используется длинной функцией.
Я думал, есть ли способ отменить BlockingQueuedConnection, когда приложение хочет выйти или есть другой способ реализации этого.
Это решило все мои проблемы! – Dave