05.11.2011 - stable version, 0.1.0, self-test program, work at GCC 2.95 - 4.5, VC 2010, MinGW, Linux, Windows, QNX
This commit is contained in:
19
pitimer.h
19
pitimer.h
@@ -5,6 +5,7 @@
|
||||
#include <csignal>
|
||||
#include "pithread.h"
|
||||
#include "pistring.h"
|
||||
#include "piobject.h"
|
||||
|
||||
typedef void (*TimerEvent)(void * , int );
|
||||
|
||||
@@ -23,30 +24,34 @@ struct PIDate {
|
||||
class PITimer
|
||||
#ifdef WINDOWS
|
||||
: public PIThread
|
||||
#else
|
||||
: public PIObject
|
||||
#endif
|
||||
{
|
||||
public:
|
||||
PITimer(TimerEvent slot = 0, void * data = 0);
|
||||
~PITimer() {stop();}
|
||||
~PITimer();
|
||||
|
||||
void setData(void * data_) {data = data_;}
|
||||
void setSlot(TimerEvent slot) {ret_func = slot;}
|
||||
#ifdef WINDOWS
|
||||
void reset() {t_st = GetCurrentTime();}
|
||||
#else
|
||||
void reset() {clock_gettime(0, &t_st);}
|
||||
void start(double msecs);
|
||||
void stop() {if (ti == 0) timer_delete(timer); ti = -1; running = false;}
|
||||
EVENT_HANDLER0(PITimer, void, reset) {clock_gettime(0, &t_st);}
|
||||
EVENT_HANDLER1(PITimer, void, start, double, msecs);
|
||||
EVENT_HANDLER0(PITimer, void, stop) {if (ti == 0) timer_delete(timer); ti = -1; running = false;}
|
||||
EVENT_HANDLER0(PITimer, bool, waitForFinish) {return waitForFinish(-1);}
|
||||
EVENT_HANDLER1(PITimer, bool, waitForFinish, int, timeout_msecs);
|
||||
bool isRunning() const {return running;}
|
||||
void needLockRun(bool need) {lockRun = need;}
|
||||
void lock() {mutex_.lock();}
|
||||
void unlock() {mutex_.unlock();}
|
||||
EVENT_HANDLER0(PITimer, void, lock) {mutex_.lock();}
|
||||
EVENT_HANDLER0(PITimer, void, unlock) {mutex_.unlock();}
|
||||
#endif
|
||||
void addDelimiter(int delim, TimerEvent slot = 0) {ret_funcs << TimerSlot(slot, delim);}
|
||||
void removeDelimiter(int delim) {for (int i = 0; i < ret_funcs.size_s(); ++i) if (ret_funcs[i].delim == delim) {ret_funcs.remove(i); i--;}}
|
||||
void removeDelimiter(TimerEvent slot) {for (int i = 0; i < ret_funcs.size_s(); ++i) if (ret_funcs[i].slot == slot) {ret_funcs.remove(i); i--;}}
|
||||
void removeDelimiter(int delim, TimerEvent slot) {for (int i = 0; i < ret_funcs.size_s(); ++i) if (ret_funcs[i].slot == slot && ret_funcs[i].delim == delim) {ret_funcs.remove(i); i--;}}
|
||||
void clearDelimiters() {ret_funcs.clear();}
|
||||
EVENT_HANDLER0(PITimer, void, clearDelimiters) {ret_funcs.clear();}
|
||||
|
||||
double elapsed_n(); // nanoseconds
|
||||
double elapsed_u(); // microseconds
|
||||
|
||||
Reference in New Issue
Block a user