Newer
Older
PrismSoftware / ECTrainer2 / HPTimer.cpp
// 高精度タイマークラス

#include "HPTimer.h"

namespace nkc {

// コンストラクタ
HPTimer::HPTimer() {
	QueryPerformanceFrequency(&_nFreq);
	QueryPerformanceCounter(&_nBegin);
	_nLast = _nBegin;
}

// 経過時間算出
double HPTimer::Calc(LARGE_INTEGER before) {
	LARGE_INTEGER cur;
	QueryPerformanceCounter(&cur);
	double elapse = (cur.QuadPart - before.QuadPart) * 1000.0 / _nFreq.QuadPart;
	_nLast = cur;
	return elapse;
}

// 開始時からの経過時間(ms)
double HPTimer::Elapse() {
	return this->Calc(_nBegin);
}

// 前回からの経過時間(ms)
double HPTimer::Interval() {
	return this->Calc(_nLast);
}

// 開始時間リセット
void HPTimer::Reset() {
	QueryPerformanceCounter(&_nBegin);
}

// 高精度Sleep
void HPTimer::HPSleep(double delayms) {
	HPTimer timer;
	while (1) {
		if (timer.Elapse() > delayms) break;
		Sleep(0);
	}
}

}; // namespace nkc