From 8fb778937b2649eb44ebf01d06450c18d2009905 Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Mon, 25 Aug 2014 18:48:23 +0100 Subject: [PATCH] add function to update next poll timer externally. --- include/tr/event_dispatcher.h | 1 + src/Makefile.am | 1 + src/event_dispatcher_start.c | 1 - src/event_dispatcher_update_next_poll.c | 41 +++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/event_dispatcher_update_next_poll.c diff --git a/include/tr/event_dispatcher.h b/include/tr/event_dispatcher.h index e6fe828..62a36e5 100644 --- a/include/tr/event_dispatcher.h +++ b/include/tr/event_dispatcher.h @@ -72,6 +72,7 @@ void TR_eventDispatcherRegisterHandler(TR_EventDispatcher, TR_EventHandler); void TR_eventDispatcherSetHeartbeat(TR_EventDispatcher, int); int TR_eventDispatcherGetBeatTime(TR_EventDispatcher); int TR_eventDispatcherGetDataWaitTime(TR_EventDispatcher); +void TR_eventDispatcherUpdateNextPoll(TR_EventDispatcher); void TR_eventDispatcherStart(TR_EventDispatcher); void TR_eventDispatcherShutdown(TR_EventDispatcher); diff --git a/src/Makefile.am b/src/Makefile.am index e77d6d2..5f3f0b4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -9,6 +9,7 @@ TREVENT = event.c \ event_dispatcher_set_hearbeat.c \ event_dispatcher_get_beat_time.c \ event_dispatcher_get_data_wait_time.c \ + event_dispatcher_update_next_poll.c \ event_dispatcher_start.c \ event_dispatcher_shutdown.c \ event_handler.c \ diff --git a/src/event_dispatcher_start.c b/src/event_dispatcher_start.c index 5da82ec..0ad631d 100644 --- a/src/event_dispatcher_start.c +++ b/src/event_dispatcher_start.c @@ -63,7 +63,6 @@ TR_eventDispatcherStart(TR_EventDispatcher this) : TR_DISPATCHER_EVENT_DATA_WAIT; int * toutptr = TR_queueEmpty(this->events) ? NULL : &ZERO; - this->nextpoll += this->pollinterval; event = TR_eventSubjectEmit((TR_EventSubject)this, evtid, toutptr); } else { event = TR_queueGet(this->events); diff --git a/src/event_dispatcher_update_next_poll.c b/src/event_dispatcher_update_next_poll.c new file mode 100644 index 0000000..b7f9b2e --- /dev/null +++ b/src/event_dispatcher_update_next_poll.c @@ -0,0 +1,41 @@ +/** + * \file + * + * \author Georg Hopp + * + * \copyright + * Copyright © 2014 Georg Hopp + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include + +#include "trbase.h" + +#include "tr/event_dispatcher.h" + +void +TR_eventDispatcherUpdateNextPoll(TR_EventDispatcher this) +{ + struct timespec tp; + int now; // milliseconds + + clock_gettime(CLOCK_REALTIME, &tp); + now = tp.tv_sec * 1000 + tp.tv_nsec / 1000000; + + while(this->nextpoll <= now) this->nextpoll += this->pollinterval; +} + +// vim: set ts=4 sw=4: