POSIXで提供されているgettimeofday()関数の粒度をチェックする方法はありますか?時間単位の粒度関数
答えて
タイトなループで呼び出すと、現在の値と前の値との差異に注意してください。以下のような何か:私のシステムで
#include <stdio.h>
#include <sys/time.h>
int main()
{
struct timeval timevals[2];
int cur = 0;
while (1) {
gettimeofday(&timevals[cur], NULL);
int diff = timevals[cur].tv_usec - timevals[!cur].tv_usec;
if (diff)
printf("%d\n", diff);
cur = !cur;
}
}
粒度が(タスク切り替えに起因する可能性があり、数百または数千外れ値で約50/50 1または2マイクロ秒)の周りに2マイクロ秒であるようです。
差をフォーマットするのにかかる時間を計算しているため、遅延を過大評価しています。 'cur =!cur;'の直後に 'gettimeofday(&timevals [!cur]、NULL);'を呼び出して、呼び出し間のギャップを最小限にする必要があります。あなたのマシンは、1マイクロ秒で2回の 'gettimeofday()'呼び出しを行うのに十分速いので、結果はたいていゼロであることが分かります。 CPUが3GHzで動作する場合、マイクロ秒は3000クロックサイクルであることを忘れないでください。あなたは3000クロックサイクルで非常に多くを行うことができます。 –
gettimeofday()
の代わりに、clock_gettime()
(CLOCK_REALTIME
クロックを指定)を使用することを検討してください。これはPOSIXでもあり、解像度を取得するための関数clock_getres()
をサポートしています。
しかし、 'clock_getres'は、実際のタイマー解決の代わりにhrtimersに対して常に1nsを返します。 – osgx
)(gettimeofdayの解像度を得るために、現在のPOSIXの方法は、古いバージョンでPOSIX
#include <unistd.h>
long ticks_per_sec = sysconf(_SC_CLK_TCK);
(変化が起こったときにわからない)で、値CLOCKS_PER_SECは、#defineで定義されました。
CLOCKS_PER_SECは標準Cで、' clock() 'に適用されます。 '_SC_CLK_TCK'は' times() 'に適用されます。 'gettimeofday()'にも適用されません。 –
- 1. 時間単位または時間単位のグループknock
- 2. 時間単位の10進数?
- 3. 角度単位テスト、SpyOnスタンドアロン関数
- 4. 時間単位の操作
- 5. 時間単位のMySQLグループ
- 6. O(N)単純なPython関数の時間複雑度
- 7. 32bitと64bit Windowsの間の日時粒度
- 8. 次の関数の時間複雑度
- 9. 配列関数の時間複雑度
- 10. 時間単位で単語を数える方法は?
- 11. AWSインスタンスの時間単位のバックアップ
- 12. LINQ to SQL - 時間単位のグループ化
- 13. Go - ピコ秒単位のシステム時間
- 14. numpy.timedelta64から秒単位の時間差
- 15. Excelの単位時間換算
- 16. 1時間以上のテーブルエントリの時間単位合計
- 17. 光沢のある時間単位の時間範囲入力
- 18. Redmineタスク粒度
- 19. モニタリング時間集計のDatadog時間単位
- 20. 時間単位のT-SQL継続時間:分:秒
- 21. C++クロノシステムの時間(単位:ミリ秒、時間)
- 22. モッキングサービスモジュール角度単位テストの変数の依存関係
- 23. 以下の角度関数の単位テストケースを書く方法
- 24. 時間単位でのファイル数のUnixコード
- 25. 異なる時間単位間の人間の文字列時間の変換
- 26. 変換時間(ミリ秒)の持続時間(BigDecimal値+時間単位)長い
- 27. 単位時間あたりのクリック数を確認する
- 28. Python Pandas複数のインデックスで時間単位で検索
- 29. 離散事象シミュレーション時間単位Java
- 30. Excelの2つの時間枠の間の時間単位での検索
標準の解像度はマイクロ秒です - 「gettimeofday()関数は、エポックから秒とマイクロ秒で表される現在の時刻を取得する」 プログラム的な方法があるかどうか質問していますかシステムクロックの分解能がマイクロ秒未満であることを確認することはできますか? – RomanK
@RomanK:解像度と細かさは同じではありません。 POSIXは実際にはマイクロ秒を指定しますが、特定の実装では、そのマイクロ秒は、例えば一度に1000だけ増分することができます。 – caf