#pragma once

/*!
	時間計測クラス

	注意：48日過ぎてTickCountが1周すると、即タイムアウトと判断される
*/
class CIntervalTimer
{
public:
	CIntervalTimer(int interval=1000)
	{
		SetInterval(interval);
	};

	//!	時間を変更(リセットされる)
	void SetInterval(int interval)
	{
		m_interval = interval;
		Reset();
	};

	//!	リセット
	void Reset()
	{
		m_oldTick = GetTickCount();
	};

	//!	タイムアウトか？
	int IsTimeout(int resetIfTimeout = TRUE)
	{
		DWORD tick = GetTickCount();

		if(m_oldTick + m_interval < tick || tick < m_oldTick)
		{
			if(resetIfTimeout)
				Reset();
			return(1);
		}
		return(0);
	}

	//!	残り時間を取得
	int GetLeftTime()
	{
		DWORD tick = GetTickCount();

		if(m_oldTick + m_interval < tick || tick < m_oldTick)
			return(0);

		return(m_oldTick + m_interval - tick);
	}

protected:
	//!	時間
	int		m_interval;

	//!	リセット時刻
	DWORD	m_oldTick;
};
