ホームページ  >  記事  >  バックエンド開発  >  Linux 上の C で、クロック() に依存せずにミリ秒精度のタイミングを実現するにはどうすればよいですか?

Linux 上の C で、クロック() に依存せずにミリ秒精度のタイミングを実現するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-13 12:15:02351ブラウズ

 How to Achieve Millisecond Precision Timing in C   on Linux Without Relying on clock()?

C : Clock() の制限なしで Linux でミリ秒を取得する方法

Clock() がミリ秒を返す Windows とは異なり、Linux の実装ではミリ秒を四捨五入します。結果は 1000 に最も近い値になり、第 2 レベルの精度のみになります。ミリ秒レベルのタイミングが必要なため、次のような疑問が生じます: サードパーティのライブラリを使用しない標準 C ソリューションはありますか?

答え: gettimeofday()

標準の POSIX 関数 gettimeofday() にあります。この関数は、timeval 構造体に現在時刻を設定することにより、高精度のタイミング情報を提供します。 gettimeofday() を使用する C の例を次に示します。

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

int main()
{
    struct timeval start, end;

    long mtime, seconds, useconds;    

    gettimeofday(&start, NULL);
    usleep(2000);
    gettimeofday(&end, NULL);

    seconds  = end.tv_sec  - start.tv_sec;
    useconds = end.tv_usec - start.tv_usec;

    mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5;

    printf("Elapsed time: %ld milliseconds\n", mtime);

    return 0;
}

このコードは、gettimeofday() から取得した秒コンポーネントとマイクロ秒コンポーネントを組み合わせて、経過時間をミリ秒単位で計算する方法を示します。 0.5 の加算は、結果を最も近い整数に丸めるために適用されることに注意してください。

以上がLinux 上の C で、クロック() に依存せずにミリ秒精度のタイミングを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。