15.10.2012 - version 0.2.0 - PIIODevice - base of file, ethernet, serial and packets extractor. PIEthernet now support also TCP (client and server). PIConsole now can align labels in each column individually.
This commit is contained in:
143
pitimer.cpp
143
pitimer.cpp
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
PIP - Platform Independent Primitives
|
||||
Timer
|
||||
Copyright (C) 2011 Ivan Pelipenko peri4ko@gmail.com
|
||||
Copyright (C) 2012 Ivan Pelipenko peri4ko@gmail.com
|
||||
|
||||
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
|
||||
@@ -56,11 +56,15 @@ PITimer::~PITimer() {
|
||||
|
||||
#ifndef WINDOWS
|
||||
void PITimer::start(double msecs) {
|
||||
if (ti == 0) return;
|
||||
if (ti == 0 || msecs < 0) return;
|
||||
spec.it_interval.tv_nsec = ((int)(msecs * 1000) % 1000000) * 1000;
|
||||
spec.it_interval.tv_sec = (time_t)(msecs / 1000);
|
||||
spec.it_value = spec.it_interval;
|
||||
ti = timer_create(CLOCK_REALTIME, &se, &timer);
|
||||
if (ti == -1) {
|
||||
piCout << "[PITimer] Can`t create timer for " << msecs << " msecs: " << errorString() << endl;
|
||||
return;
|
||||
}
|
||||
timer_settime(timer, 0, &spec, 0);
|
||||
running = true;
|
||||
}
|
||||
@@ -119,11 +123,10 @@ void PITimer::run() {
|
||||
double PITimer::elapsed_n() {
|
||||
#ifdef WINDOWS
|
||||
t_cur = GetCurrentTime();
|
||||
return (t_cur * 1000000. - t_st * 1000000.);
|
||||
return (t_cur - t_st) * 1000000.;
|
||||
#else
|
||||
clock_gettime(0, &t_cur);
|
||||
return (t_cur.tv_sec * 1.e+9 + t_cur.tv_nsec) -
|
||||
(t_st.tv_sec * 1.e+9 + t_st.tv_nsec);
|
||||
return (t_cur.tv_sec - t_st.tv_sec) * 1.e+9 + (t_cur.tv_nsec - t_st.tv_nsec);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -131,11 +134,10 @@ double PITimer::elapsed_n() {
|
||||
double PITimer::elapsed_u() {
|
||||
#ifdef WINDOWS
|
||||
t_cur = GetCurrentTime();
|
||||
return (t_cur * 1000. - t_st * 1000.);
|
||||
return (t_cur - t_st) * 1000.;
|
||||
#else
|
||||
clock_gettime(0, &t_cur);
|
||||
return (t_cur.tv_sec * 1.e+6 + (t_cur.tv_nsec / 1.e+3)) -
|
||||
(t_st.tv_sec * 1.e+6 + (t_st.tv_nsec / 1.e+3));
|
||||
return (t_cur.tv_sec - t_st.tv_sec) * 1.e+6 + (t_cur.tv_nsec - t_st.tv_nsec) / 1.e+3;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -146,8 +148,7 @@ double PITimer::elapsed_m() {
|
||||
return (double)(t_cur - t_st);
|
||||
#else
|
||||
clock_gettime(0, &t_cur);
|
||||
return (t_cur.tv_sec * 1.e+3 + (t_cur.tv_nsec / 1.e+6)) -
|
||||
(t_st.tv_sec * 1.e+3 + (t_st.tv_nsec / 1.e+6));
|
||||
return (t_cur.tv_sec - t_st.tv_sec) * 1.e+3 + (t_cur.tv_nsec - t_st.tv_nsec) / 1.e+6;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -155,11 +156,102 @@ double PITimer::elapsed_m() {
|
||||
double PITimer::elapsed_s() {
|
||||
#ifdef WINDOWS
|
||||
t_cur = GetCurrentTime();
|
||||
return (t_cur / 1000. - t_st / 1000.);
|
||||
return (t_cur - t_st) / 1000.;
|
||||
#else
|
||||
clock_gettime(0, &t_cur);
|
||||
return (t_cur.tv_sec + (t_cur.tv_nsec / 1.e+9)) -
|
||||
(t_st.tv_sec + (t_st.tv_nsec / 1.e+9));
|
||||
return (t_cur.tv_sec - t_st.tv_sec) + (t_cur.tv_nsec - t_st.tv_nsec) / 1.e+9;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
double PITimer::reset_time_n() {
|
||||
#ifdef WINDOWS
|
||||
t_cur = GetCurrentTime();
|
||||
return t_st * 1000000.;
|
||||
#else
|
||||
clock_gettime(0, &t_cur);
|
||||
return t_st.tv_sec * 1.e+9 + t_st.tv_nsec;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
double PITimer::reset_time_u() {
|
||||
#ifdef WINDOWS
|
||||
t_cur = GetCurrentTime();
|
||||
return (t_cur - t_st) * 1000.;
|
||||
#else
|
||||
clock_gettime(0, &t_cur);
|
||||
return t_st.tv_sec * 1.e+6 + t_st.tv_nsec / 1.e+3;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
double PITimer::reset_time_m() {
|
||||
#ifdef WINDOWS
|
||||
t_cur = GetCurrentTime();
|
||||
return (double)(t_cur - t_st);
|
||||
#else
|
||||
clock_gettime(0, &t_cur);
|
||||
return t_st.tv_sec * 1.e+3 + t_st.tv_nsec / 1.e+6;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
double PITimer::reset_time_s() {
|
||||
#ifdef WINDOWS
|
||||
t_cur = GetCurrentTime();
|
||||
return (t_cur - t_st) / 1000.;
|
||||
#else
|
||||
clock_gettime(0, &t_cur);
|
||||
return t_st.tv_sec + t_st.tv_nsec / 1.e+9;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
double PITimer::elapsed_system_n() {
|
||||
#ifdef WINDOWS
|
||||
long t_cur = GetCurrentTime();
|
||||
return (t_cur * 1000000.);
|
||||
#else
|
||||
timespec t_cur;
|
||||
clock_gettime(0, &t_cur);
|
||||
return (t_cur.tv_sec * 1.e+9 + t_cur.tv_nsec);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
double PITimer::elapsed_system_u() {
|
||||
#ifdef WINDOWS
|
||||
long t_cur = GetCurrentTime();
|
||||
return (t_cur * 1000.);
|
||||
#else
|
||||
timespec t_cur;
|
||||
clock_gettime(0, &t_cur);
|
||||
return (t_cur.tv_sec * 1.e+6 + (t_cur.tv_nsec / 1.e+3));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
double PITimer::elapsed_system_m() {
|
||||
#ifdef WINDOWS
|
||||
long t_cur = GetCurrentTime();
|
||||
return (double)t_cur;
|
||||
#else
|
||||
timespec t_cur;
|
||||
clock_gettime(0, &t_cur);
|
||||
return (t_cur.tv_sec * 1.e+3 + (t_cur.tv_nsec / 1.e+6));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
double PITimer::elapsed_system_s() {
|
||||
#ifdef WINDOWS
|
||||
long t_cur = GetCurrentTime();
|
||||
return (t_cur / 1000.);
|
||||
#else
|
||||
timespec t_cur;
|
||||
clock_gettime(0, &t_cur);
|
||||
return (t_cur.tv_sec + (t_cur.tv_nsec / 1.e+9));
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -186,6 +278,31 @@ PIDate currentDate() {
|
||||
}
|
||||
|
||||
|
||||
PIString PITime::toString(const PIString & format) {
|
||||
PIString ts = format;
|
||||
ts.replace("hh", PIString::fromNumber(hours).expandLeftTo(2, '0'));
|
||||
ts.replace("h", PIString::fromNumber(hours));
|
||||
ts.replace("mm", PIString::fromNumber(minutes).expandLeftTo(2, '0'));
|
||||
ts.replace("m", PIString::fromNumber(minutes));
|
||||
ts.replace("ss", PIString::fromNumber(seconds).expandLeftTo(2, '0'));
|
||||
ts.replace("s", PIString::fromNumber(seconds));
|
||||
return ts;
|
||||
}
|
||||
|
||||
|
||||
PIString PIDate::toString(const PIString & format) {
|
||||
PIString ts = format;
|
||||
ts.replace("yyyy", PIString::fromNumber(year).expandLeftTo(4, '0'));
|
||||
ts.replace("yy", PIString::fromNumber(year).expandLeftTo(2, '0'));
|
||||
ts.replace("y", PIString::fromNumber(year));
|
||||
ts.replace("mm", PIString::fromNumber(month).expandLeftTo(2, '0'));
|
||||
ts.replace("m", PIString::fromNumber(month));
|
||||
ts.replace("dd", PIString::fromNumber(day).expandLeftTo(2, '0'));
|
||||
ts.replace("d", PIString::fromNumber(day));
|
||||
return ts;
|
||||
}
|
||||
|
||||
|
||||
PIString time2string(const PITime & time, const PIString & format) {
|
||||
PIString ts = format;
|
||||
ts.replace("hh", PIString::fromNumber(time.hours).expandLeftTo(2, '0'));
|
||||
|
||||
Reference in New Issue
Block a user