Admin
Регистрация: 05.10.2005
Проживание: Москва
Сообщения: 284
|
Как поиметь uptime винды в int64 в секундах
Известная проблема - стандартная виндовая функция GetTickCount(), возвращающая число миллисекунд с момента старта системы, через 47 дней начинает возвращать одно и то же (47 с чем-то дней), т.к. возвращает она 4-байтовое число, которое достигает предела.
Вот пример функции, которая возвращает системный аптайм в int64 (8-байтовое число), правда в секундах.
unsigned __int64 getSystemUptime() {
LARGE_INTEGER f;
LARGE_INTEGER t;
unsigned __int64 f_i = 0;
unsigned __int64 t_i = 0;
if (QueryPerformanceFrequency(&f) && QueryPerformanceCounter(&t)) {
*(int *)&f_i = f.LowPart;
*(int *)((BYTE *)&f_i + sizeof(int)) = f.HighPart;
*(int *)&t_i = t.LowPart;
*(int *)((BYTE *)&t_i + sizeof(int)) = t.HighPart;
return t_i / f_i;
}
else return 0;
}
|