X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/597f6f31e3801612273886481381df509d8bcd12..ac9dc8faf23104c8d82cbf5ff0041f46da8d9534:/projects/stargazer/stg_timer.cpp diff --git a/projects/stargazer/stg_timer.cpp b/projects/stargazer/stg_timer.cpp index 235c669e..572b069a 100644 --- a/projects/stargazer/stg_timer.cpp +++ b/projects/stargazer/stg_timer.cpp @@ -1,16 +1,21 @@ -#include +#include "stg_timer.h" + +#include "stg/common.h" #include #include #include -#include "stg/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 @@ -19,12 +24,13 @@ const int TIME_SPEED = 1; 10 - 10x speed */ -const int START_TIME = 0; +const int START_TIME = 2; /* 0 - as is 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 *) @@ -33,11 +39,12 @@ void * StgTimer(void *) struct tm lt; memset(<, 0, sizeof(lt)); -lt.tm_year = 2007 - 1900; // 2005 -lt.tm_mon = 11 - 1; // Nov +lt.tm_year = 2016 - 1900; // 2005 +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) { @@ -51,7 +58,7 @@ switch (START_TIME) break; case 2: - lt.tm_mday = 30; + lt.tm_mday = 31; stgTime = mktime(<); break; } @@ -68,7 +75,17 @@ isTimerRunning = true; while (nonstop) { #ifdef STG_TIMER_DEBUG - struct timespec ts = {0, 1000000000 / TIME_SPEED}; + struct timespec ts; + if (TIME_SPEED == 1) + { + ts.tv_sec = 1; + ts.tv_nsec = 0; + } + else + { + ts.tv_sec = 0; + ts.tv_nsec = 1000000000 / TIME_SPEED; + } nanosleep(&ts, NULL); stgTime++; #else @@ -88,7 +105,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; @@ -113,10 +130,10 @@ return isTimerRunning; int stgUsleep(unsigned long t) { #ifdef STG_TIMER_DEBUG -struct timespec ts = {(t / TIME_SPEED) / 1000000, ((t / TIME_SPEED) % 1000000) * 1000}; +struct timespec ts = {static_cast((t / TIME_SPEED) / 1000000), static_cast(((t / TIME_SPEED) % 1000000) * 1000)}; return nanosleep(&ts, NULL); #else -struct timespec ts = {t / 1000000, (t % 1000000) * 1000}; +struct timespec ts = {static_cast(t / 1000000), static_cast((t % 1000000) * 1000)}; return nanosleep(&ts, NULL); #endif }