1. ホーム
  2. c++

[解決済み] Linuxでミリ秒単位の時刻を取得するC++ -- clock()が正しく動作しないようです。

2023-01-06 19:57:59

質問

Windowsの場合。 clock() はミリ秒単位で時間を返しますが、私が作業しているこの Linux ボックスでは、1000 に最も近い値に丸められるため、精度はミリ秒レベルではなく "second" レベルにとどまります。

私は、Qt で QTime クラスを使用し、オブジェクトをインスタンス化し start() を呼び出した後 elapsed() を呼び出して、経過したミリ秒数を取得します。

そもそもQtで作業しているので、ちょっとラッキーだったのですが、サードパーティのライブラリに依存しない解決策が欲しいです。

標準的な方法はないのでしょうか?

UPDATE

Boostを薦めないようにお願いします。

BoostやQtができるのであれば、きっと魔法ではなく、何か標準的なものを使っているに違いない!

どのように解決するのですか?

メソッドの最初と最後にgettimeofdayを使用し、2つの戻り値の構造体を差分することができます。 以下のような構造体が得られます。

struct timeval {
  time_t tv_sec;
  suseconds_t tv_usec;
}

EDIT: 下の2つのコメントが示唆するように、clock_gettime(CLOCK_MONOTONIC)は、利用可能であれば、より良い選択です(最近はほとんどどこでもそうでしょう)。

EDIT: 他の誰かが、std::chrono::high_resolution_clockでモダンC++を使うこともできるとコメントしましたが、これは単調であることが保証されていません。代わりに steady_clock を使ってください。