diff --git a/window.cpp b/window.cpp
index 9e227830f233e07a08326a842bbde1a950c3f1b7..516e8bb44bd2e465c922b7201f1bf670c48bea5f 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 f05749a47fbaa7e251aed4760e7cdb311d9a9c46..8347cee0f1204e6a52c27094abd833b0e2fd72ee 100644
--- a/window.h
+++ b/window.h
@@ -35,6 +35,7 @@ private:
             }
         }
     };
+    inline void delay(int millisecondsWait);
 
 signals:
     void counterReached();