/** * \file * A timer with second, millisec, microsec or nanosec granularity. * * \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 . */ #ifndef __TR_TIMER_H__ #define __TR_TIMER_H__ #include #include "trbase.h" #ifdef _WIN32 struct timespec { time_t tv_sec; long tv_nsec; }; #define CLOCK_REALTIME 1 int clock_gettime(int, struct timespec *tv); #endif typedef enum { TR_TBASE_NAN = 0, TR_TBASE_MIC, TR_TBASE_MIL, TR_TBASE_SEC } TR_eTimeoutBase; TR_CLASS(TR_Timer) { int sec; int nsec; TR_eTimeoutBase base; unsigned long timeout; }; TR_INSTANCE_INIT(TR_Timer); TR_CLASSVARS_DECL(TR_Timer) {}; void TR_timerSet(TR_Timer, TR_eTimeoutBase, unsigned long); unsigned long TR_timerGet(TR_Timer, unsigned long *); // 2nd arg gets amount of // missed since last check. #define TR_timerSetNan(timer, val) (TR_timerSet((timer), TR_TBASE_NAN, (val))) #define TR_timerSetMic(timer, val) (TR_timerSet((timer), TR_TBASE_MIC, (val))) #define TR_timerSetMil(timer, val) (TR_timerSet((timer), TR_TBASE_MIL, (val))) #define TR_timerSetSec(timer, val) (TR_timerSet((timer), TR_TBASE_SEC, (val))) #endif // __TR_TIMER_H__ // vim: set ts=4 sw=4: