Информация
На главную Главная

Мой t-cards.ru
Войти Войти
Зарегистрироваться Регистрация

Разное
Форум Форум
Вернуться Форумы на t-cards.ru> Hard"n"Soft
Логин
Пароль
Регистрация Участники Поиск >> FAQ


Сообщения в теме: "Как поиметь uptime винды в int64 в секундах..."
20.12.2007 15:45
Admin

Регистрация: 05.10.2005
Проживание: Москва
Сообщения: 272
По умолчаниюКак поиметь 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;
}