時間関数に違いがあり、その理由は何だろうと思っていました。現在、localtime、mktime、strftime、および difftime を使用しています。
time_t ltime;
ltime = time(NULL);
StartTM = localtime(<ime);
time_t time1 = mktime(StartTM );
char startbuffer [128];
strftime( start_buffer, 128, "%H:%M:%S", StartTM );
<<Do some stuff, take some time >>>
time_t ttime;
ttime = time(NULL);
StopTM = localtime(&ttime);
time_t time2 = mktime(StopTM );
char stop_buffer [128];
strftime( stop_buffer, 128, "%H:%M:%S:", StopTM );
double wtinsec = difftime(time2, time1);
実行すると、出力は次のようになります。
ストップバッファ=08:46:18
開始バッファ=08:44:11
wtinsec=129
手動で開始から停止を差し引くと、時間の長さは 2:07 ですが、合計秒数 (difftime) は 2:09 になります。両方の時間は両方の計算に同じ生データ (time1、time2) を使用しているため、最初の考えでは、strftime 変換の精度不足と difftime の組み合わせが原因でした。
しかし、その差は一定ではありません。2 つのローカル コール間の時間が短い場合 (10 秒など)、違いはありません。ただし、2 回の呼び出しの間の時間が長くなるにつれて、合計時間の差は大きくなります。2 分で 2 秒、5 分で 4 秒など...
これが発生している理由と、時間を追跡して別の時間を減算できる、できればマイクロ/ミリ秒単位のより正確な (C++ で) ものはありますか?
ありがとう。