添加一个高性能定时器
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
|
||||
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)
|
||||
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