diff --git a/include/tr/event_dispatcher.h b/include/tr/event_dispatcher.h index 77ca9cf..bb465f7 100644 --- a/include/tr/event_dispatcher.h +++ b/include/tr/event_dispatcher.h @@ -46,8 +46,8 @@ TR_CLASS(TR_EventDispatcher) { TR_Hash handler; TR_EventHandler default_handler; int running; - time_t heartbeat; - time_t nextbeat; + int heartbeat; // milliseconds + int nextbeat; // milliseconds TR_EventDispatcherMode mode; }; TR_INSTANCE_INIT(TR_EventDispatcher); @@ -61,12 +61,12 @@ TR_CLASSVARS_DECL(TR_EventDispatcher) { #define TR_DISPATCHER_EVENT_SHUTDOWN 3 #define TR_DISPATCHER_EVENT_MAX ((size_t)TR_DISPATCHER_EVENT_SHUTDOWN) -void TR_eventDispatcherRegisterHandler(TR_EventDispatcher, TR_EventHandler); -void TR_eventDispatcherSetHeartbeat(TR_EventDispatcher, time_t); -time_t TR_eventDispatcherGetBeatTime(TR_EventDispatcher); -time_t TR_eventDispatcherGerDataWaitTime(TR_EventDispatcher); -void TR_eventDispatcherStart(TR_EventDispatcher); -void TR_eventDispatcherShutdown(TR_EventDispatcher); +void TR_eventDispatcherRegisterHandler(TR_EventDispatcher, TR_EventHandler); +void TR_eventDispatcherSetHeartbeat(TR_EventDispatcher, int); +int TR_eventDispatcherGetBeatTime(TR_EventDispatcher); +int TR_eventDispatcherGerDataWaitTime(TR_EventDispatcher); +void TR_eventDispatcherStart(TR_EventDispatcher); +void TR_eventDispatcherShutdown(TR_EventDispatcher); #define TR_eventDispatcherEnqueueEvent(disp,ev) \ (TR_queuePut((disp)->events, (ev))) diff --git a/src/event_dispatcher_get_beat_time.c b/src/event_dispatcher_get_beat_time.c index e3cf8d2..8f597b0 100644 --- a/src/event_dispatcher_get_beat_time.c +++ b/src/event_dispatcher_get_beat_time.c @@ -26,10 +26,16 @@ #include "tr/event_dispatcher.h" -time_t +int TR_eventDispatcherGetBeatTime(TR_EventDispatcher this) { - return this->nextbeat - time(NULL); + struct timespec tp; + int now; // milliseconds + + clock_gettime(CLOCK_REALTIME, &tp); + now = tp.tv_sec * 1000 + tp.tv_nsec / 1000000; + + return this->nextbeat - now; } // vim: set ts=4 sw=4: diff --git a/src/event_dispatcher_get_data_wait_time.c b/src/event_dispatcher_get_data_wait_time.c index e199ef8..87dae3f 100644 --- a/src/event_dispatcher_get_data_wait_time.c +++ b/src/event_dispatcher_get_data_wait_time.c @@ -20,13 +20,11 @@ * along with this program. If not, see . */ -#include - #include "trbase.h" #include "tr/event_dispatcher.h" -time_t +int TR_eventDispatcherGetDataWaitTime(TR_EventDispatcher this) { if (TR_EVD_SERVER == this->mode) { diff --git a/src/event_dispatcher_set_hearbeat.c b/src/event_dispatcher_set_hearbeat.c index 6e9e4be..e4e3b3f 100644 --- a/src/event_dispatcher_set_hearbeat.c +++ b/src/event_dispatcher_set_hearbeat.c @@ -27,12 +27,18 @@ #include "tr/event_dispatcher.h" void -TR_eventDispatcherSetHeartbeat(TR_EventDispatcher this, time_t heartbeat) +TR_eventDispatcherSetHeartbeat(TR_EventDispatcher this, int heartbeat) { + struct timespec tp; + int now; // milliseconds + + clock_gettime(CLOCK_REALTIME, &tp); + now = tp.tv_sec * 1000 + tp.tv_nsec / 1000000; + this->heartbeat = heartbeat; if (this->heartbeat) { - this->nextbeat = time(NULL) + this->heartbeat; + this->nextbeat = now + this->heartbeat; } else { this->nextbeat = 0; } diff --git a/src/event_dispatcher_start.c b/src/event_dispatcher_start.c index 8a02349..515c0ef 100644 --- a/src/event_dispatcher_start.c +++ b/src/event_dispatcher_start.c @@ -36,8 +36,12 @@ TR_eventDispatcherStart(TR_EventDispatcher this) this->running = 1; while (this->running || (! TR_queueEmpty(this->events))) { - time_t now = time(NULL); - TR_Event current = NULL; + struct timespec tp; + int now; // milliseconds + TR_Event current = NULL; + + clock_gettime(CLOCK_REALTIME, &tp); + now = tp.tv_sec * 1000 + tp.tv_nsec / 1000000; if (this->nextbeat && this->nextbeat <= now) { this->nextbeat += this->heartbeat;