diff --git a/src/advanced-scene-switcher.cpp b/src/advanced-scene-switcher.cpp index 57f8c432..df59e982 100644 --- a/src/advanced-scene-switcher.cpp +++ b/src/advanced-scene-switcher.cpp @@ -1569,7 +1569,7 @@ void SwitcherData::Start() { if (!(th && th->isRunning())) { stop = false; - switcher->th = QThread::create([]() { switcher->Thread(); }); + switcher->th = new SwitcherThread(); switcher->th->start((QThread::Priority)switcher->threadPriority); } } @@ -1582,6 +1582,8 @@ void SwitcherData::Stop() transitionCv.notify_one(); cv.notify_one(); th->wait(); + delete th; + th = nullptr; } } diff --git a/src/headers/switcher-data-structs.hpp b/src/headers/switcher-data-structs.hpp index b10e43af..bcdca7b2 100644 --- a/src/headers/switcher-data-structs.hpp +++ b/src/headers/switcher-data-structs.hpp @@ -253,11 +253,14 @@ struct TimeSwitch { typedef enum { NO_SWITCH = 0, SWITCH = 1, RANDOM_SWITCH = 2 } NoMatch; +class SwitcherThread; + /******************************************************************************** * SwitcherData ********************************************************************************/ struct SwitcherData { - QThread* th = nullptr; + SwitcherThread *th; + condition_variable cv; mutex m; bool transitionActive = false; @@ -482,3 +485,10 @@ struct SwitcherData { } inline ~SwitcherData() { Stop(); } }; + +extern SwitcherData *switcher; +class SwitcherThread : public QThread { +public: + explicit SwitcherThread(){}; + void run() { switcher->Thread(); }; +};