X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/3ca47b6485cc3911cec82112f037303c52a40c0c..c59911ca3cd38cf4ab36d2cc62686f97395899f9:/projects/stargazer/stg_timer.cpp?ds=inline diff --git a/projects/stargazer/stg_timer.cpp b/projects/stargazer/stg_timer.cpp index 5bdbe712..7a460ddf 100644 --- a/projects/stargazer/stg_timer.cpp +++ b/projects/stargazer/stg_timer.cpp @@ -2,16 +2,26 @@ #include "stg/common.h" +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wshadow" +#include +#pragma GCC diagnostic pop + #include #include #include #include +namespace +{ + +std::jthread thread; + +} + void * StgTimer(void *); -static int nonstop; -static pthread_t thrStgTimer; static bool isTimerRunning = false; volatile time_t stgTime; @@ -33,7 +43,7 @@ const int START_TIME = 2; #endif //----------------------------------------------------------------------------- -void * StgTimer(void *) +void timer(std::stop_token token) { #ifdef STG_TIMER_DEBUG struct tm lt; @@ -44,6 +54,7 @@ lt.tm_mon = 7 - 1; // Nov lt.tm_hour = 23; // 23 h lt.tm_min = 57; // 50 min lt.tm_sec = 0; // 00 sec +lt.tm_isdst = -1; switch (START_TIME) { @@ -69,9 +80,8 @@ sigset_t signalSet; sigfillset(&signalSet); pthread_sigmask(SIG_BLOCK, &signalSet, NULL); -nonstop = 1; isTimerRunning = true; -while (nonstop) +while (!token.stop_requested()) { #ifdef STG_TIMER_DEBUG struct timespec ts; @@ -94,30 +104,22 @@ while (nonstop) #endif } isTimerRunning = false; - -return NULL; } //----------------------------------------------------------------------------- int RunStgTimer() { -static int a = 0; isTimerRunning = false; -if (a == 0) - if (pthread_create(&thrStgTimer, NULL, &StgTimer, NULL)) - { - isTimerRunning = false; - return -1; - } +if (!thread.joinable()) + thread = std::jthread(timer); -a = 1; return 0; } //----------------------------------------------------------------------------- void StopStgTimer() { -nonstop = 0; -pthread_join(thrStgTimer, NULL); // Cleanup thread resources +thread.request_stop(); +thread.join(); printfd(__FILE__, "STG_TIMER stopped\n"); } //-----------------------------------------------------------------------------