Отримати системний час у мілісекундах на початку, і знову в кінці, і відняти.
Щоб отримати кількість мілісекунд з 1970 року в POSIX, ви повинні написати:
struct timeval tv;
gettimeofday(&tv, NULL);
return ((((unsigned long long)tv.tv_sec) * 1000) +
(((unsigned long long)tv.tv_usec) / 1000));
Щоб отримати кількість мілісекунд з 1601 року в Windows, ви повинні написати:
SYSTEMTIME systime;
FILETIME filetime;
GetSystemTime(&systime);
if (!SystemTimeToFileTime(&systime, &filetime))
return 0;
unsigned long long ns_since_1601;
ULARGE_INTEGER* ptr = (ULARGE_INTEGER*)&ns_since_1601;
// copy the result into the ULARGE_INTEGER; this is actually
// copying the result into the ns_since_1601 unsigned long long.
ptr->u.LowPart = filetime.dwLowDateTime;
ptr->u.HighPart = filetime.dwHighDateTime;
// Compute the number of milliseconds since 1601; we have to
// divide by 10,000, since the current value is the number of 100ns
// intervals since 1601, not ms.
return (ns_since_1601 / 10000);
Якщо ви дбали про нормалізацію відповіді Windows так, щоб вона також повертала кількість мілісекунд з 1970 року, тоді вам довелося б скорегувати свою відповідь на 11644473600000 мілісекунд. Але це не потрібно, якщо все, що вас турбує, це минулий час.