プログラミング言語比較で、Win32の経過時間の計り方を追加。
- time()はC言語の標準だが、秒単位。
- GetTickCount()は精度があまりよくないらしい(数ミリ秒単位)。
- timeGetTime()はマルチメディアタイマー。
- QueryPerformanceCounter()はマイクロ秒単位(に近い)。が、OSによって使えたり使えなかったりするらしい。
使用したい場面によるのは当然としても、他の言語では実際の精度が分からなくても選択肢が少ない(例えばJavaならSystem#currentTimeMillis()を使うでしょ?Dateでもいいけど、中身は同じな気がする)ということを考えれば、普通はGetTickCount()を使っとけば無難な気がする。
time()は基点となる日付からの経過時間を秒単位で返すが、戻り値はtime_t型で実体はlong(32bit)。したがって2038/01/19 03:14:07までしか表せないのは有名な話。
でも実行時間を知りたいだけならtime()とtime()の値の差をとればよく、この時刻をまたいでも平気なはず。
つまり、最初のtime呼び出しが2038年より前で、次のtime呼び出しが4076年より後だったら、正しい時間が算出できない!
西暦4076年を過ぎるまで発覚しない、まさに潜在バグ(笑)
仕様に明記しておくべき事項!…かなぁ?(爆)
(初回を2038年までに呼び出し、その後4076年まで実行してないとこのバグは起きないんだから(笑))