1

システムクロックを使用せずにLinux/Unixで経過時間を測定する方法はありますか? time問題は、状況によってはシステムクロックが変化し、またはその他の方法で測定された経過時間gettimeofdayが誤った結果をもたらすことです。

sleep(100)内部でループを実行し、繰り返し回数をカウントする別のスレッドを作成することを考えています。

より良い解決策はありますか?

4

4 に答える 4

6

std::chrono::steady_clockは時間を測定するために使用でき、システム クロックの変更を考慮に入れます。

于 2014-01-02T16:12:54.120 に答える
4

ある時点からの時間を表す単調時間を使用します: 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;
}
于 2014-01-02T16:13:34.007 に答える
2

(またはバリアント)で経過時間を測定することsleepは悪い考えです。スリープ時間が経過した後はいつでもスレッドがウェイクアップする可能性があるため、これは間違いなく不正確です。

于 2014-01-02T16:08:42.270 に答える
1

時間遅延については、たとえば を使用できますselect

于 2014-01-02T16:09:23.730 に答える