]> git.stg.codes - stg.git/blobdiff - projects/stargazer/stg_timer.cpp
sys/time.h header added for struct timeval
[stg.git] / projects / stargazer / stg_timer.cpp
index 79844ba3213fca734ce2771b5f1a96f6e9a83a53..235c669e0df09dcea32c31d94e9b5347932b88ff 100644 (file)
@@ -1,9 +1,10 @@
-#include <unistd.h>
 #include <pthread.h>
 
+#include <ctime>
 #include <cstring>
+#include <csignal>
 
-#include "common.h"
+#include "stg/common.h"
 
 static int nonstop;
 static pthread_t thrStgTimer;
@@ -33,7 +34,7 @@ struct tm lt;
 memset(&lt, 0, sizeof(lt));
 
 lt.tm_year = 2007 - 1900; // 2005
-lt.tm_mon  = 10 - 1;      // Nov
+lt.tm_mon  = 11 - 1;      // Nov
 lt.tm_hour = 23;          // 23 h
 lt.tm_min = 57;           // 50 min
 lt.tm_sec = 0;            // 00 sec
@@ -54,18 +55,26 @@ switch (START_TIME)
         stgTime = mktime(&lt);
         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;
@@ -104,9 +113,11 @@ return isTimerRunning;
 int stgUsleep(unsigned long t)
 {
 #ifdef STG_TIMER_DEBUG
-return usleep(t / TIME_SPEED);
+struct timespec ts = {(t / TIME_SPEED) / 1000000, ((t / TIME_SPEED) % 1000000) * 1000};
+return nanosleep(&ts, NULL);
 #else
-return usleep(t);
+struct timespec ts = {t / 1000000, (t % 1000000) * 1000};
+return nanosleep(&ts, NULL);
 #endif
 }
 //-----------------------------------------------------------------------------
@@ -116,5 +127,3 @@ void WaitTimer()
         stgUsleep(200000);
 }
 //-----------------------------------------------------------------------------
-
-