Tick Count

Тема в разделе "WASM.WIN32", создана пользователем ormoulu, 24 июн 2011.

  1. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Когда начинается отсчет "тиков" в системе? Мсдн утверждает, что якобы "The GetTickCount function retrieves the number of milliseconds that have elapsed since the system was started".

    Получаю системное время через NtQuerySystemInformation (SYSTEM_TIMEOFDAY_INFORMATION...
    sti.liKeSystemTime совпадает с полученным через GetSystemTimeAsFileTime.

    Вычитаю из него sti.liKeBootTime, и предполагаю, что получившийся лонглонг, деленный на 10000 (чтобы из 100*наносекунд получить миллисекунды) должен давать число тиков с момента старта системы.
    На деле же получается что (sti.liKeSystemTime-sti.liKeBootTime) == 0x4F0F372, а GetTickCount == 0x4EEFEF7, т.е. GetTickCount возвращает несколько меньшее число.

    Вопрос: так и должно быть или я что-то делаю неправильно?


    ЗЫ: NtQueryObject (OBJECT_BASIC_INFORMATION...) для ряда символьных ссылок возвращает время создания, более раннее, чем число тиков, т.е. получается, что часть объектов ядра создается до начала их отсчета.
     
  2. klzlk

    klzlk New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2011
    Сообщения:
    449
    ormoulu
    У меня разница в 1 тик, тоесть дельта равна 0x1F(счётчик тиков не линейный - это его квант):

    CurrentTime: 0xD886FA816 clc = 0x58B087 ms

    Ticks: 0x58B0A6 ms

    dT = 0x58B0A6 - 0x58B087 = 0x1F ms

    У вас тоже так должно быть, вы не правильно вычислили.