code : http://damody.googlecode.com/files/TTimer.7z
感覺可能有小錯,請多指教。
template<class TIMER_IMP>
class TTimer
{
public:
enum TimerState
{
RUNNING,
STOPPED,
};
TIMER_IMP m_timer;
int m_status;
double m_CountTime;
public:
TTimer():m_status(RUNNING){}
/// 開始
double Start()
{
m_status = RUNNING;
m_timer.ReStart();
return m_CountTime;
}
/// 停止
double Stop()
{
m_CountTime += GetTime();
m_status = STOPPED;
return m_CountTime;
}
/// 重新計時
void Restart()
{
m_CountTime = 0;
m_status = RUNNING;
m_timer.ReStart();
}
/// 更新起始點為現在
void ReTick()
{
m_timer.ReStart();
}
/// 得到以秒為單位的時間
double GetTime()
{
return m_timer.GetTime();
}
double GetCountTime()
{
if (m_status == STOPPED)
return m_CountTime;
return m_CountTime + m_timer.GetTime();
}
};
先定義一個只需要ReStart實作跟GetTime實作的樣版。
用標準程式庫實作timer
class stdTimer
{
public:
// Reset the timer
inline void ReStart()
{
start = std::clock();
}
// Save the result
inline double GetTime()
{
double elapsed = (double)std::clock() - start;
elapsed /= CLOCKS_PER_SEC;
return elapsed;
}
private:
std::clock_t start;
};
其它的同樣也這樣實作,
最後做出四種timer
namespace timer
{
typedef TTimer<stdTimer> std;
typedef TTimer<rdtscTimer> rdtsc;
typedef TTimer<winTimer> win;
typedef TTimer<unixTimer> unix;
}
其中std跟rdtsc可以在unix或windows上跑,
rdtsc一定要在 pc 的環境,std則不用。
留言列表