システムクロックを使用せずにLinux/Unixで経過時間を測定する方法はありますか? time
問題は、状況によってはシステムクロックが変化し、またはその他の方法で測定された経過時間gettimeofday
が誤った結果をもたらすことです。
sleep(100)
内部でループを実行し、繰り返し回数をカウントする別のスレッドを作成することを考えています。
より良い解決策はありますか?
システムクロックを使用せずにLinux/Unixで経過時間を測定する方法はありますか? time
問題は、状況によってはシステムクロックが変化し、またはその他の方法で測定された経過時間gettimeofday
が誤った結果をもたらすことです。
sleep(100)
内部でループを実行し、繰り返し回数をカウントする別のスレッドを作成することを考えています。
より良い解決策はありますか?
std::chrono::steady_clockは時間を測定するために使用でき、システム クロックの変更を考慮に入れます。
ある時点からの時間を表す単調時間を使用します: http://linux.die.net/man/3/clock_gettime
int64_t get_monotonic_timestamp(void)
{
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return (int64_t)ts.tv_sec * 1000000 + ts.tv_nsec / 1000;
}
(またはバリアント)で経過時間を測定することsleep
は悪い考えです。スリープ時間が経過した後はいつでもスレッドがウェイクアップする可能性があるため、これは間違いなく不正確です。
時間遅延については、たとえば を使用できますselect
。