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. 時間単位の10進数?
- 2. 32bitと64bit Windowsの間の日時粒度
- 3. 時間単位の操作
- 4. 時間単位のMySQLグループ
- 5. Redmineタスク粒度
- 6. AWSインスタンスの時間単位のバックアップ
- 7. Go - ピコ秒単位のシステム時間
- 8. LINQ to SQL - 時間単位のグループ化
- 9. Excelの単位時間換算
- 10. numpy.timedelta64から秒単位の時間差
- 11. 時間単位のT-SQL継続時間:分:秒
- 12. C++クロノシステムの時間(単位:ミリ秒、時間)
- 13. 減少粒度は
- 14. スキームのacc関数の時間複雑度は?
- 15. OpenLayers - 十進数緯度/経度単位のメルカトル図解
- 16. 変更時に時間単位のデータを圧縮するクエリ
- 17. カウントダウン日時、時間、分、秒単位のスクリプトjquery
- 18. クリーンアーキテクチャー - Robert Martin - ユースケース粒度
- 19. スレッドの優先度と関数実行時間
- 20. 時間単位のリサンプル特定の開始時間を持つTimeSeries
- 21. 2つの日付の時間差(時間単位)を取得する方法
- 22. 時間の関数構文
- 23. UIグリッドリフレッシュ(角度単位)
- 24. data.table:時間ごとにIDateTimeを時間単位で遅らせる
- 25. Visual Studioでのシンタックスカラーリングの粒度
- 26. 時間単位あたりの繰り返し回数を制限する
- 27. 時間単位での2つのdatetime値の差を示す
- 28. エポックからの現在の時間(秒単位)のファイル名
- 29. CSSトランジション期間の単位
- 30. 統一単位でのドッカー時間の測定
標準の解像度はマイクロ秒です - 「gettimeofday()関数は、エポックから秒とマイクロ秒で表される現在の時刻を取得する」 プログラム的な方法があるかどうか質問していますかシステムクロックの分解能がマイクロ秒未満であることを確認することはできますか? – RomanK
@RomanK:解像度と細かさは同じではありません。 POSIXは実際にはマイクロ秒を指定しますが、特定の実装では、そのマイクロ秒は、例えば一度に1000だけ増分することができます。 – caf