1

gettimeday と localtime を使用して、複数のアプリケーションとデータ パスで経過したシステム時間を監視しようとしています。この例では、コードを実行する直前にシステム時間 (マイクロ秒の精度) を取得したいと考えています。私は現在、次のようにしています:

#include <stdio.h>
#include <sys/time.h>

struct timeval tv;
struct timezone tz;
struct tm *tm;

**code I don't care about**

gettimeofday(&tv, NULL);
tm=localtime(&tv.tv_sec);

**code to watch**    

printf(" %d:%02d:%02d %ld \n", tm->tm_hour, tm->tm_min,
            tm->tm_sec, tv.tv_usec);

私が理解していることから、 localtime 呼び出しは間違いなく少しオーバーヘッドが発生し、精度が低下する可能性があります。これについては完全に間違っているかもしれませんが、監視するコードが完了するまで localtime を呼び出すのを待つ必要がありますか? 私は localtime が gettimeofday の結果のやや高価な変換を行っているだけであると想定しているため、printf ステートメントの直前に配置する必要があります。

4

1 に答える 1

2

本当にマイクロ秒の精度が必要な場合は、そうです。localtime1マイクロ秒未満で実行された場合、私は非常に驚かれることでしょう。しかしgettimeofday、マイクロ秒の解像度があったとしても、実際のタイマーがそうであったとしても(非常にありそうにない)、システムから戻るときのコンテキストの切り替えにはおそらく1マイクロ秒以上かかるでしょう(そしてへの呼び出しよりも長くなる可能性がありますlocaltime) . 実際には、特別なハードウェアに直接アクセスする場合を除いて、マイクロ秒の解像度に近づくことはできません。

于 2011-05-05T16:12:26.713 に答える