Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh mengalihkan fungsi `clock_gettime` ke Windows untuk pengukuran masa yang tepat?

Bagaimanakah saya boleh mengalihkan fungsi `clock_gettime` ke Windows untuk pengukuran masa yang tepat?

Susan Sarandon
Lepaskan: 2024-10-26 15:48:30
asal
1089 orang telah melayarinya

How can I port the `clock_gettime` function to Windows for accurate timing measurements?

Mengalih clock_gettime ke Windows

Masalah:

Anda mempunyai kod yang bergantung pada clock_gettime berfungsi untuk mengukur masa pelaksanaan pada QNX MOmentics tetapi perlu memindahkannya ke Windows.

Penyelesaian:

Untuk mengalihkan fungsi clock_gettime ke Windows, anda boleh menggunakan kod berikut :

<code class="cpp">LARGE_INTEGER
getFILETIMEoffset()
{
    SYSTEMTIME s;
    FILETIME f;
    LARGE_INTEGER t;

    s.wYear = 1970;
    s.wMonth = 1;
    s.wDay = 1;
    s.wHour = 0;
    s.wMinute = 0;
    s.wSecond = 0;
    s.wMilliseconds = 0;
    SystemTimeToFileTime(&s, &f);
    t.QuadPart = f.dwHighDateTime;
    t.QuadPart <<= 32;
    t.QuadPart |= f.dwLowDateTime;
    return (t);
}

int
clock_gettime(int X, struct timeval *tv)
{
    LARGE_INTEGER t;
    FILETIME f;
    double microseconds;
    static LARGE_INTEGER offset;
    static double frequencyToMicroseconds;
    static int initialized = 0;
    static BOOL usePerformanceCounter = 0;

    if (!initialized) {
        LARGE_INTEGER performanceFrequency;
        initialized = 1;
        usePerformanceCounter = QueryPerformanceFrequency(&performanceFrequency);
        if (usePerformanceCounter) {
            QueryPerformanceCounter(&offset);
            frequencyToMicroseconds = (double)performanceFrequency.QuadPart / 1000000.;
        } else {
            offset = getFILETIMEoffset();
            frequencyToMicroseconds = 10.;
        }
    }
    if (usePerformanceCounter)
        QueryPerformanceCounter(&t);
    else {
        GetSystemTimeAsFileTime(&f);
        t.QuadPart = f.dwHighDateTime;
        t.QuadPart <<= 32;
        t.QuadPart |= f.dwLowDateTime;
    }

    t.QuadPart -= offset.QuadPart;
    microseconds = (double)t.QuadPart / frequencyToMicroseconds;
    t.QuadPart = microseconds;
    tv->tv_sec = t.QuadPart / 1000000;
    tv->tv_usec = t.QuadPart % 1000000;
    return (0);
}</code>
Salin selepas log masuk

Kod ini akan menyediakan pengganti untuk clock_gettime yang sesuai untuk Windows, membolehkan anda mengira masa pelaksanaan dengan tepat dalam kod port anda.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengalihkan fungsi `clock_gettime` ke Windows untuk pengukuran masa yang tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan