X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/15c40aa2f808c1d48aab717636238aea13880f88..384b6aa9598ee2c9edebcb158549f0ced324ad30:/projects/stargazer/stg_timer.cpp diff --git a/projects/stargazer/stg_timer.cpp b/projects/stargazer/stg_timer.cpp index 7903c38d..d39c61db 100644 --- a/projects/stargazer/stg_timer.cpp +++ b/projects/stargazer/stg_timer.cpp @@ -1,15 +1,21 @@ -#include -#include +#include "stg_timer.h" + +#include "stg/common.h" +#include #include +#include -#include "common.h" +#include + +void * StgTimer(void *); static int nonstop; static pthread_t thrStgTimer; static bool isTimerRunning = false; volatile time_t stgTime; +#ifdef STG_TIMER_DEBUG const int TIME_SPEED = 1; /* 1 - 1x speed @@ -24,6 +30,7 @@ const int START_TIME = 0; 1 - start before new day (3 min before) 29.11.2005 23:57:00 2 - start before new month (3 min before) 30.11.2005 23:57:00 */ +#endif //----------------------------------------------------------------------------- void * StgTimer(void *) @@ -54,18 +61,26 @@ switch (START_TIME) stgTime = mktime(<); break; } +#else +stgTime = time(NULL); #endif +sigset_t signalSet; +sigfillset(&signalSet); +pthread_sigmask(SIG_BLOCK, &signalSet, NULL); + nonstop = 1; isTimerRunning = true; while (nonstop) { #ifdef STG_TIMER_DEBUG - usleep(1000000 / TIME_SPEED); + struct timespec ts = {0, 1000000000 / TIME_SPEED}; + nanosleep(&ts, NULL); stgTime++; #else + struct timespec ts = {0, 500000000}; + nanosleep(&ts, NULL); stgTime = time(NULL); - usleep(500000); #endif } isTimerRunning = false; @@ -79,7 +94,7 @@ static int a = 0; isTimerRunning = false; if (a == 0) - if (pthread_create(&thrStgTimer, NULL, StgTimer, NULL)) + if (pthread_create(&thrStgTimer, NULL, &StgTimer, NULL)) { isTimerRunning = false; return -1; @@ -104,9 +119,11 @@ return isTimerRunning; int stgUsleep(unsigned long t) { #ifdef STG_TIMER_DEBUG -return usleep(t / TIME_SPEED); +struct timespec ts = {static_cast((t / TIME_SPEED) / 1000000), static_cast(((t / TIME_SPEED) % 1000000) * 1000)}; +return nanosleep(&ts, NULL); #else -return usleep(t); +struct timespec ts = {static_cast(t / 1000000), static_cast((t % 1000000) * 1000)}; +return nanosleep(&ts, NULL); #endif } //----------------------------------------------------------------------------- @@ -116,5 +133,3 @@ void WaitTimer() stgUsleep(200000); } //----------------------------------------------------------------------------- - -