Windowsが起動してからの経過時間を取得する

Win32 APIで「GetTickCount」が用意されています。
DWORD型にミリ秒単位で返って来ます。

MSDNでも解説されていますが約49.7日で0に戻ります。 まー、DWORDって事は、0xFFFFFFFFFF(msec)=4294967295(msec)≒49.7(days)なので 当たり前といえば当たり前ですね。

その昔、49.7日で固まるってのがありましたが懐かしく思えてしまいましたよ。
0に戻ってしまったときの処理がうまく出来てなかったようですね。 OS側にも問題はあったようですが、ドライバ関係では手抜きというか Win9x系のOSをそんなにも長く連続稼動させるなんて考えてなかった のかもしれませんね。

さてサンプルです。

#include <windows.h>
#include <stdio.h>

int main()
{
DWORD time;
int day,hour,minute,second,m_second;

time = GetTickCount();

printf("TickCount:%d,0x%x\n",time,time);
m_second = time % 1000;
second = (int)(time / 1000);
minute = (int)(second / 60);
second %= 60;
hour = (int)(minute / 60);
minute %= 60;
day = (int)(hour / 24);
hour %= 24;

printf("起動後:%ddays %d:%d:%d'%d\n",day,hour,minute,second,m_second);
}