Linux C言語高精度時間関数:gettimeofday()取得時間差

1892 ワード

  • 概要:ある関数の呼び出しに時間がかかる.C言語では関数gettimeofday()関数を用いて時間を得ることができる.その精度はマイクロ秒に達することができ、x 86-64プラットフォームgettimeofday()はすでにシステム呼び出しではなく、カーネルに陥ることはなく、複数回の呼び出しで性能損失はない.
  • 関数プロトタイプ:#include
    int gettimeofday(struct timeval*tv,struct timezone *tz )
  • 説明:<1>.gettimeofday()は現在の時間をtv構造体で返す、現地タイムゾーンの情報はtzが指す構造に<2>置かれる.struct timeval構造体は時間変数であり、2つのメンバー変数を含む:tv_sec(秒)、tv_usec(マイクロ秒);第2の構造体はタイムゾーンである、この例ではNULLとして設定できるものは用いられない.
    struct  timeval{
    long  tv_sec;/* */
    long  tv_usec;/*  */
    };
    struct  timezone{
    int tz_minuteswest;/* Greewich        */
    int tz_dsttime;/*type of DST correction*/
    }
  • のコード例:
    struct timeval tvBegin, tvEnd;
    gettimeofday(&tvBegin, NULL);
    //      ...
    gettimeofday(&tvEnd, NULL);
    //<1>.     :
    double dDuration = 1000 * (tvEnd.tv_sec - tvBegin.tv_sec) + ((tvEnd.tv_usec - tvBegin.tv_usec) / 1000.0);
    //<2>.    :
    double dDuration = (tvEnd.tv_sec - tvBegin.tv_sec) + ((tvEnd.tv_usec - tvBegin.tv_usec) / 1000.0) / 1000.0;
    注意:秒数を取得する場合、分母は1000.0である必要があり、1000であれば整数を返すので、正確ではない.理由:同じデータ型のデータ、変数を演算し、結果は元のデータ型を維持します.異なるデータ型のデータ、変数が演算されると、結果は精度の高いデータ型となる.たとえば、1/2の結果は0です.1.0/2の結果は0.5 C言語のその他の時間関数(Linux&Win)
  • であった.