Windows Mobile

Window Mobile で、アプリの画面にCPU使用率を表示しようと、こんなコードを書いてみた。
OnIdle()処理で、CPU使用率がどのくらい低下するかを見ようと思ったのだが…

「本当にアイドルしたら、画面更新できないじゃん」

画面更新できなかったら、CPU使用率表示できないっつーの。
Timerで更新するという手もあるかしらん。Timerで1000ms単位でCPU使用率だけ更新するみたいな…
WM_TIMERポストしたら、Idleループから出てきちゃうじゃん…

などなど、脳内 endless-loop を形成してみました。


あ〜ぁ。


// GetCpuUilization returns CPU utilization value from 0 to 100(%)
static int GetCpuUtilization()
{
	static DWORD dwLastTickCount = 0;
	static DWORD dwLastIdleAmount = 0;
	if (dwLastTickCount == 0)
	{
		dwLastTickCount = ::GetTickCount();
		dwLastIdleAmount = ::GetIdleTime();
		return 0;
	}

	DWORD dwTickCount = ::GetTickCount();
	DWORD dwIdleAmount = ::GetIdleTime();
	DWORD dwUtilization = 100 - (dwIdleAmount - dwLastIdleAmount) * 100 / (dwTickCount - dwLastTickCount);

	// save current information
	dwLastTickCount = dwTickCount;
	dwLastIdleAmount = dwIdleAmount;

	// Pass the result
	return dwUtilization;
}