添加一个高性能定时器
parent
a4f2da4a13
commit
176b1073c6
|
@ -35,7 +35,7 @@ aux_source_directory(src/pattern PaternSrc)
|
||||||
|
|
||||||
|
|
||||||
add_library(General OBJECT ${DIRSRCS} ${PaternSrc} src/pattern/signleton.hpp src/pattern/Observer.hpp src/pattern/stratergy.hpp "src/pattern/adapter.hpp" src/encrypt/base64.cpp src/encrypt/base64.h src/encrypt/aes.cpp src/encrypt/aes.h src/encrypt/rsa.cpp
|
add_library(General OBJECT ${DIRSRCS} ${PaternSrc} src/pattern/signleton.hpp src/pattern/Observer.hpp src/pattern/stratergy.hpp "src/pattern/adapter.hpp" src/encrypt/base64.cpp src/encrypt/base64.h src/encrypt/aes.cpp src/encrypt/aes.h src/encrypt/rsa.cpp
|
||||||
src/math/BigInt.hpp src/net/TcpClient.cpp src/net/TcpClient.h src/net/PackageReceiver.cpp src/net/PackageReceiver.h src/function/btree.cpp src/function/btree.h src/algorithm/sorter.hpp)
|
src/math/BigInt.hpp src/net/TcpClient.cpp src/net/TcpClient.h src/net/PackageReceiver.cpp src/net/PackageReceiver.h src/function/Timer.cpp src/function/btree.cpp src/function/btree.h src/algorithm/sorter.hpp)
|
||||||
|
|
||||||
set(COPYITEM inc)
|
set(COPYITEM inc)
|
||||||
file(GLOB INCLUDES ${PROJECT_SOURCE_DIR}/inc/*)
|
file(GLOB INCLUDES ${PROJECT_SOURCE_DIR}/inc/*)
|
||||||
|
|
|
@ -0,0 +1,132 @@
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Timer.cpp
|
||||||
|
// =========
|
||||||
|
// High Resolution Timer.
|
||||||
|
// This timer is able to measure the elapsed time with 1 micro-second accuracy
|
||||||
|
// in both Windows, Linux and Unix system
|
||||||
|
//
|
||||||
|
// AUTHOR: Song Ho Ahn (song.ahn@gmail.com)
|
||||||
|
// CREATED: 2003-01-13
|
||||||
|
// UPDATED: 2017-03-30
|
||||||
|
//
|
||||||
|
// Copyright (c) 2003 Song Ho Ahn
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "Timer.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// constructor
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
Timer::Timer()
|
||||||
|
{
|
||||||
|
#if defined(WIN32) || defined(_WIN32)
|
||||||
|
QueryPerformanceFrequency(&frequency);
|
||||||
|
startCount.QuadPart = 0;
|
||||||
|
endCount.QuadPart = 0;
|
||||||
|
#else
|
||||||
|
startCount.tv_sec = startCount.tv_usec = 0;
|
||||||
|
endCount.tv_sec = endCount.tv_usec = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
stopped = 0;
|
||||||
|
startTimeInMicroSec = 0;
|
||||||
|
endTimeInMicroSec = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// distructor
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
Timer::~Timer()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// start timer.
|
||||||
|
// startCount will be set at this point.
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Timer::start()
|
||||||
|
{
|
||||||
|
stopped = 0; // reset stop flag
|
||||||
|
#if defined(WIN32) || defined(_WIN32)
|
||||||
|
QueryPerformanceCounter(&startCount);
|
||||||
|
#else
|
||||||
|
gettimeofday(&startCount, NULL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// stop the timer.
|
||||||
|
// endCount will be set at this point.
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
void Timer::stop()
|
||||||
|
{
|
||||||
|
stopped = 1; // set timer stopped flag
|
||||||
|
|
||||||
|
#if defined(WIN32) || defined(_WIN32)
|
||||||
|
QueryPerformanceCounter(&endCount);
|
||||||
|
#else
|
||||||
|
gettimeofday(&endCount, NULL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// compute elapsed time in micro-second resolution.
|
||||||
|
// other getElapsedTime will call this first, then convert to correspond resolution.
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
double Timer::getElapsedTimeInMicroSec()
|
||||||
|
{
|
||||||
|
#if defined(WIN32) || defined(_WIN32)
|
||||||
|
if(!stopped)
|
||||||
|
QueryPerformanceCounter(&endCount);
|
||||||
|
|
||||||
|
startTimeInMicroSec = startCount.QuadPart * (1000000.0 / frequency.QuadPart);
|
||||||
|
endTimeInMicroSec = endCount.QuadPart * (1000000.0 / frequency.QuadPart);
|
||||||
|
#else
|
||||||
|
if(!stopped)
|
||||||
|
gettimeofday(&endCount, NULL);
|
||||||
|
|
||||||
|
startTimeInMicroSec = (startCount.tv_sec * 1000000.0) + startCount.tv_usec;
|
||||||
|
endTimeInMicroSec = (endCount.tv_sec * 1000000.0) + endCount.tv_usec;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return endTimeInMicroSec - startTimeInMicroSec;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// divide elapsedTimeInMicroSec by 1000
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
double Timer::getElapsedTimeInMilliSec()
|
||||||
|
{
|
||||||
|
return this->getElapsedTimeInMicroSec() * 0.001;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// divide elapsedTimeInMicroSec by 1000000
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
double Timer::getElapsedTimeInSec()
|
||||||
|
{
|
||||||
|
return this->getElapsedTimeInMicroSec() * 0.000001;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// same as getElapsedTimeInSec()
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
double Timer::getElapsedTime()
|
||||||
|
{
|
||||||
|
return this->getElapsedTimeInSec();
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Timer.h
|
||||||
|
// =======
|
||||||
|
// High Resolution Timer.
|
||||||
|
// This timer is able to measure the elapsed time with 1 micro-second accuracy
|
||||||
|
// in both Windows, Linux and Unix system
|
||||||
|
//
|
||||||
|
// AUTHOR: Song Ho Ahn (song.ahn@gmail.com)
|
||||||
|
// CREATED: 2003-01-13
|
||||||
|
// UPDATED: 2017-03-30
|
||||||
|
//
|
||||||
|
// Copyright (c) 2003 Song Ho Ahn
|
||||||
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef TIMER_H_DEF
|
||||||
|
#define TIMER_H_DEF
|
||||||
|
|
||||||
|
#if defined(WIN32) || defined(_WIN32) // Windows system specific
|
||||||
|
#include <windows.h>
|
||||||
|
#else // Unix based system specific
|
||||||
|
#include <sys/time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
class Timer
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Timer(); // default constructor
|
||||||
|
~Timer(); // default destructor
|
||||||
|
|
||||||
|
void start(); // start timer
|
||||||
|
void stop(); // stop the timer
|
||||||
|
double getElapsedTime(); // get elapsed time in second
|
||||||
|
double getElapsedTimeInSec(); // get elapsed time in second (same as getElapsedTime)
|
||||||
|
double getElapsedTimeInMilliSec(); // get elapsed time in milli-second
|
||||||
|
double getElapsedTimeInMicroSec(); // get elapsed time in micro-second
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
double startTimeInMicroSec; // starting time in micro-second
|
||||||
|
double endTimeInMicroSec; // ending time in micro-second
|
||||||
|
int stopped; // stop flag
|
||||||
|
#if defined(WIN32) || defined(_WIN32)
|
||||||
|
LARGE_INTEGER frequency; // ticks per second
|
||||||
|
LARGE_INTEGER startCount; //
|
||||||
|
LARGE_INTEGER endCount; //
|
||||||
|
#else
|
||||||
|
timeval startCount; //
|
||||||
|
timeval endCount; //
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TIMER_H_DEF
|
Loading…
Reference in New Issue