Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mencapai Masa Ketepatan Milisaat dalam C pada Linux Tanpa Bergantung pada clock()?

Bagaimana untuk Mencapai Masa Ketepatan Milisaat dalam C pada Linux Tanpa Bergantung pada clock()?

Barbara Streisand
Barbara Streisandasal
2024-11-13 12:15:02351semak imbas

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

C : Cara Mendapatkan Milisaat pada Linux Tanpa Had Jam()

Tidak seperti Windows di mana clock() mengembalikan milisaat, pelaksanaan Linux mengelilingi keputusan kepada 1000 terdekat, menghasilkan ketepatan tahap kedua sahaja. Keperluan untuk pemasaan peringkat milisaat menimbulkan persoalan: Adakah terdapat penyelesaian C standard tanpa menggunakan perpustakaan pihak ketiga?

Jawapannya: gettimeofday()

Jawapannya terletak pada fungsi POSIX standard gettimeofday(). Fungsi ini menyediakan maklumat pemasaan ketepatan tinggi dengan mengisi struktur jangka masa dengan masa semasa. Berikut ialah contoh C yang menggunakan gettimeofday():

#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;
}

Kod ini menunjukkan cara mengira masa berlalu dalam milisaat dengan menggabungkan komponen saat dan mikrosaat yang diperoleh daripada gettimeofday(). Ambil perhatian bahawa penambahan 0.5 digunakan untuk membundarkan hasil kepada integer terdekat.

Atas ialah kandungan terperinci Bagaimana untuk Mencapai Masa Ketepatan Milisaat dalam C pada Linux Tanpa Bergantung pada clock()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn