#include #include "atimer.h" int timeval_subtract (struct timeval *result, struct timeval *x, struct timeval *y) { // NOTE: THIS FUNCTION IS GNU CODE AND IS USED UNDER THE GPL. // Purpose: // Put the result of subtraction of x & y into result // // Arguments: // result - the container for the result of subtraction // x - the ending time // y - the starting time // // Return value: // NONE // Perform the carry for the later subtraction by updating y. if (x->tv_usec < y->tv_usec) { int nsec = (y->tv_usec - x->tv_usec) / 1000000 + 1; y->tv_usec -= 1000000 * nsec; y->tv_sec += nsec; } if (x->tv_usec - y->tv_usec > 1000000) { int nsec = (x->tv_usec - y->tv_usec) / 1000000; y->tv_usec += 1000000 * nsec; y->tv_sec -= nsec; } // Compute the time remaining to wait. // tv_usec is certainly positive. result->tv_sec = x->tv_sec - y->tv_sec; result->tv_usec = x->tv_usec - y->tv_usec; // Return 1 if result is negative. return x->tv_sec < y->tv_sec; } void atimer::Start() { ntp_gettime(&start_t); } void atimer::Stop() { ntptimeval result; ntp_gettime(&end_t); timeval_subtract(&result.time, &end_t.time, &start_t.time); myElapsed = (result.time.tv_sec + (result.time.tv_usec / 1000000.0)); // Calculate elapsed time in seconds myCumulative += myElapsed; } void atimer::Reset() { end_t.time.tv_sec = 0; end_t.time.tv_usec = 0; start_t.time.tv_sec = 0; start_t.time.tv_usec = 0; myElapsed = 0; myCumulative = 0; } double atimer::ElapsedTime() { return myElapsed; } double atimer::CumulativeTime() { return myCumulative; }