git.stg.codes
/
stg.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add an option to opt-out Firebird store.
[stg.git]
/
projects
/
stargazer
/
stg_timer.cpp
diff --git
a/projects/stargazer/stg_timer.cpp
b/projects/stargazer/stg_timer.cpp
index d39c61db0a15a9d45be125b54bc22e36086f1425..7a460ddfc89e68b710d9909d451c3c3d046c02ce 100644
(file)
--- a/
projects/stargazer/stg_timer.cpp
+++ b/
projects/stargazer/stg_timer.cpp
@@
-2,16
+2,26
@@
#include "stg/common.h"
#include "stg/common.h"
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wshadow"
+#include <jthread.hpp>
+#pragma GCC diagnostic pop
+
#include <ctime>
#include <cstring>
#include <csignal>
#include <pthread.h>
#include <ctime>
#include <cstring>
#include <csignal>
#include <pthread.h>
+namespace
+{
+
+std::jthread thread;
+
+}
+
void * StgTimer(void *);
void * StgTimer(void *);
-static int nonstop;
-static pthread_t thrStgTimer;
static bool isTimerRunning = false;
volatile time_t stgTime;
static bool isTimerRunning = false;
volatile time_t stgTime;
@@
-24,7
+34,7
@@
const int TIME_SPEED = 1;
10 - 10x speed
*/
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
/*
0 - as is
1 - start before new day (3 min before) 29.11.2005 23:57:00
@@
-33,17
+43,18
@@
const int START_TIME = 0;
#endif
//-----------------------------------------------------------------------------
#endif
//-----------------------------------------------------------------------------
-void
* StgTimer(void *
)
+void
timer(std::stop_token token
)
{
#ifdef STG_TIMER_DEBUG
struct tm lt;
memset(<, 0, sizeof(lt));
{
#ifdef STG_TIMER_DEBUG
struct tm lt;
memset(<, 0, sizeof(lt));
-lt.tm_year = 20
07
- 1900; // 2005
-lt.tm_mon =
11
- 1; // Nov
+lt.tm_year = 20
16
- 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_hour = 23; // 23 h
lt.tm_min = 57; // 50 min
lt.tm_sec = 0; // 00 sec
+lt.tm_isdst = -1;
switch (START_TIME)
{
switch (START_TIME)
{
@@
-57,7
+68,7
@@
switch (START_TIME)
break;
case 2:
break;
case 2:
- lt.tm_mday = 3
0
;
+ lt.tm_mday = 3
1
;
stgTime = mktime(<);
break;
}
stgTime = mktime(<);
break;
}
@@
-69,12
+80,21
@@
sigset_t signalSet;
sigfillset(&signalSet);
pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
sigfillset(&signalSet);
pthread_sigmask(SIG_BLOCK, &signalSet, NULL);
-nonstop = 1;
isTimerRunning = true;
isTimerRunning = true;
-while (
nonstop
)
+while (
!token.stop_requested()
)
{
#ifdef STG_TIMER_DEBUG
{
#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
nanosleep(&ts, NULL);
stgTime++;
#else
@@
-84,30
+104,22
@@
while (nonstop)
#endif
}
isTimerRunning = false;
#endif
}
isTimerRunning = false;
-
-return NULL;
}
//-----------------------------------------------------------------------------
int RunStgTimer()
{
}
//-----------------------------------------------------------------------------
int RunStgTimer()
{
-static int a = 0;
isTimerRunning = false;
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()
{
return 0;
}
//-----------------------------------------------------------------------------
void StopStgTimer()
{
-
nonstop = 0
;
-pthread_join(thrStgTimer, NULL); // Cleanup thread resources
+
thread.request_stop()
;
+thread.join();
printfd(__FILE__, "STG_TIMER stopped\n");
}
//-----------------------------------------------------------------------------
printfd(__FILE__, "STG_TIMER stopped\n");
}
//-----------------------------------------------------------------------------