diff --git a/src/advanced-scene-switcher.cpp b/src/advanced-scene-switcher.cpp index 7177656f..cbe89c0b 100644 --- a/src/advanced-scene-switcher.cpp +++ b/src/advanced-scene-switcher.cpp @@ -1563,7 +1563,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); } } @@ -1576,6 +1576,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 2a12d6ef..97d5f90b 100644 --- a/src/headers/switcher-data-structs.hpp +++ b/src/headers/switcher-data-structs.hpp @@ -251,11 +251,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; @@ -480,3 +483,10 @@ struct SwitcherData { } inline ~SwitcherData() { Stop(); } }; + +extern SwitcherData *switcher; +class SwitcherThread : public QThread { +public: + explicit SwitcherThread(){}; + void run() { switcher->Thread(); }; +};