WinAPIなしで細かい時間を取得してみる (ネタ)

 現在の時間を取得しようとするとなると、


unsigned int t = (unsigned int)time( NULL );
とするのが一般的かと思いますが、

これだと一秒単位でしか取得できない。



 もしも、秒単位より細かい分解能が欲しくなった場合は、


unsigned long clock = 0;

_asm
{
rdtsc
mov clock, eax
}

としてやれば、clockに現在のクロック数の下位32bitが入る。*1 *2



…ので、CPUのスペックに完全に依存してしまうものの、

WinAPIなしでも秒より細かい単位の時間を得られる…(苦笑)

(実際は上記の「eax」以外にも「edx」と「QueryPerformanceFrequency()」を使えばナノ秒単位の時間を得ることが出来ます。)





 ……と思ったら、clock()なんていうものがあるのか…。

知らんかった(汗)

 --- 追記 (08/03/04 23:18)

…コレ(clock()って)、内部的にはGetTickCount()か何かなんじゃなかろうか?

何か微妙な精度の同じような値しか出ないんですが…。




*1:実際に使う際は、「cpuid」命令を使ってパフォーマンスカウンタが使えるか確認してから使うこと。

*2:よく最上位bitに1が入るので、「clock & 0x7fffffff」として31bitで使った方が使いやすいかも…。