Если вам не нужно время для события, которое длится более 49 дней, вы можете БЕЗОПАСНО игнорировать переход на другое . Просто всегда вычитайте предыдущий timeGetTime () из текущего timeGetTime (), и вы всегда будете получать точное время, измеренное дельтой, даже при циклическом изменении - при условии, что вы синхронизируете события, общая продолжительность составляет менее 49 дней . Все это работает из-за того, что модульная математика без знака работает внутри компьютера.
// this code ALWAYS works, even with wrap-around!
DWORD dwStart = timeGetTime();
// provided the event timed here has a duration of less than 49 days
DWORD dwDuration = timeGetTime()-dwStart;
СОВЕТ: посмотрите на TimeBeginPeriod (1L), чтобы увеличить точность timeGetTime ().
НО ... если вам нужна 64-битная версия timeGetTime, вот она:
__int64 timeGetTime64() {
static __int64 time64=0;
// warning: if multiple threads call this function, protect with a critical section!
return (time64 += (timeGetTime()-(DWORD)time64));
}
Обратите внимание, что если эта функция не вызывается хотя бы раз в 49 дней, эта функция не сможет правильно определить переход.