From 77f31348dfcf793945a12eef175ad8cda82cd8d5 Mon Sep 17 00:00:00 2001 From: Silas Dohm <silas.dohm@stud.hs-bochum.de> Date: Sun, 14 Aug 2022 13:12:57 +0200 Subject: [PATCH] removed sleep, delay no longer blocks event loop --- window.cpp | 20 ++++++++++++++------ window.h | 1 + 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/window.cpp b/window.cpp index 9e22783..516e8bb 100644 --- a/window.cpp +++ b/window.cpp @@ -9,6 +9,7 @@ #include <QHBoxLayout> #include <QVBoxLayout> #include <QSpacerItem> +#include <QTimer> Window::Window(QWidget *parent) : QWidget{parent} @@ -85,19 +86,19 @@ void Window::solveButtonClicked() while (1) { repaint(); // draw cells again - QThread::msleep(m_delay); + delay(m_delay); if (backtracking) { hist.back()->cell->un(); if (hist.back()->index.size() == 0) { - hist.pop_back(); - continue; - } + hist.pop_back(); + continue; + } backtracking = false; int choiceNr = rand() % hist.back()->index.size(); // choose a random number; repaint(); // draw cells again - QThread::msleep(m_delay); + delay(m_delay); hist.back()->cell->collapse(hist.back()->index[choiceNr]); // collapse cell with chosen number; std::vector<int>::iterator it; it = hist.back()->index.begin() + choiceNr; @@ -145,7 +146,14 @@ void Window::solveButtonClicked() } // qInfo("%d---:)"); } - +inline void Window::delay(int millisecondsWait) +{ + QEventLoop loop; + QTimer t; + t.connect(&t, &QTimer::timeout, &loop, &QEventLoop::quit); + t.start(millisecondsWait); + loop.exec(); +} void Window::clearButtonClicked() { for (auto &x : m_cell) diff --git a/window.h b/window.h index f05749a..8347cee 100644 --- a/window.h +++ b/window.h @@ -35,6 +35,7 @@ private: } } }; + inline void delay(int millisecondsWait); signals: void counterReached(); -- GitLab