Вопрос по visual-studio-2010, winapi – Эквивалент gettimeday () для Windows

18

Кто-нибудь знает эквивалентную функцию gettimeofday () в среде Windows? Я сравниваю время выполнения кода в Linux и Windows. Я использую MS Visual Studio 2010, и он продолжает говорить, идентификатор & quot; gettimeofday & quot; не определено

Благодарен за любые указатели.

возможный дубликатWhat should I use to replace gettimeofday() on Windows? James McLaughlin

Ваш Ответ

3   ответа
8

GetLocalTime() для времени в системном часовом поясе,GetSystemTime() для UTC. Если вы хотите время с начала эпохи, используйтеSystemTimeToFileTime() или жеGetSystemTimeAsFileTime().

Для интервального приема используйтеGetTickCount(), Возвращает миллисекунды с момента запуска.

Для получения интервалов с наилучшим возможным разрешением (ограниченным только аппаратным обеспечением) используйтеQueryPerformanceCounter().

4

вот один из PostgreSQL который использует Windows API и соответствующие преобразования.

Однако, если вы хотите тайм-код, я предлагаю вам посмотреть наQueryPerformanceCounter () илинепосредственно вызывая TSC например, если вы собираетесь работать только на x86.

59

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <stdint.h> // portable: uint64_t   MSVC: __int64 

// MSVC defines this in winsock2.h!?
typedef struct timeval {
    long tv_sec;
    long tv_usec;
} timeval;

int gettimeofday(struct timeval * tp, struct timezone * tzp)
{
    // Note: some broken versions only have 8 trailing zero's, the correct epoch has 9 trailing zero's
    // This magic number is the number of 100 nanosecond intervals since January 1, 1601 (UTC)
    // until 00:00:00 January 1, 1970 
    static const uint64_t EPOCH = ((uint64_t) 116444736000000000ULL);

    SYSTEMTIME  system_time;
    FILETIME    file_time;
    uint64_t    time;

    GetSystemTime( &system_time );
    SystemTimeToFileTime( &system_time, &file_time );
    time =  ((uint64_t)file_time.dwLowDateTime )      ;
    time += ((uint64_t)file_time.dwHighDateTime) << 32;

    tp->tv_sec  = (long) ((time - EPOCH) / 10000000L);
    tp->tv_usec = (long) (system_time.wMilliseconds * 1000);
    return 0;
}
Это должен быть принятый ответ!
Я знаю, что это старый, почему tzp передается, так как на него не ссылаются?
Спасибо :) :) :)
Отлично. У меня есть код, который был включен в эту реализацию. Точно такой же, но мне нужно, чтобы этот код работал на Linux, и я не знаю, как это сделать. Как мне реализовать этот кусок кода для компиляции в Linux, используя эту же реализацию с использованием C ++ или C? Thks
@ S4nD3r #ifdef _WIN32 ... включает строки выше ... #else #include & lt; sys / time.h & gt; #endif ... Посмотрите мое использование в моем проекте Buddhabrot:raw.githubusercontent.com/Michaelangel007/buddhabrot/master/…

Похожие вопросы