Вот специфичный для Windows простой математический подход, о котором я упоминал в своих предыдущих комментариях:
#include <windows.h>
#include <iostream>
int main() {
FILETIME now;
FILETIME epoch_ft;
SYSTEMTIME epoch_st = { 1970, 1, 4, 1, 0, 0, 0, 0 };
GetSystemTimeAsFileTime(&now);
SystemTimeToFileTime(&epoch_st, &epoch_ft);
ULARGE_INTEGER nsecs, epoch_nsecs;
nsecs.LowPart = now.dwLowDateTime;
nsecs.HighPart = now.dwHighDateTime;
epoch_nsecs.LowPart = epoch_ft.dwLowDateTime;
epoch_nsecs.HighPart = epoch_ft.dwHighDateTime;
nsecs.QuadPart -= epoch_nsecs.QuadPart;
std::cout << "100-nsec periods since epoch: " << nsecs.QuadPart << '\n';
return 0;
}
Вышеуказанное получает текущее системное время как время файла и время файла эпохи, и вычитает их, чтобы получить число интервалов в 100 наносекунд с начала эпохи.
Windows FILETIME
- это число интервалов в 100 наносекунд с 1 января 1601 . У него нет фактического разрешения наносекунды, и я думаю разрешение, используемое GetSystemTimeAsFileTime()
, равно миллисекунде, как GetSystemTime()
, но это, вероятно, такой же точный подход, как вы собираетесь получить. Если вы используете Windows 8, Server 2012 или выше, существует также GetSystemTimePreciseAsFileTime () , который можно использовать вместо этого для получения максимальной поддерживаемой точности.