Здравствуйте! В нижеследующем коде наблюдаю страное значения возвращаемые функцией - NtQuerySystemInformation: Код (Text): type SYSTEM_PROCESSOR_TIMES = record IdleTime, KernelTime, UserTime, DpcTime, InterruptTime: Int64; InterruptCount: Cardinal; end; var TimesStart, TimesEnd: SYSTEM_PROCESSOR_TIMES; NtQuerySystemInformation(8, TimesStart, SizeOf(SYSTEM_PROCESSOR_TIMES), nil); Sleep(1000); NtQuerySystemInformation(8, TimesEnd, SizeOf(SYSTEM_PROCESSOR_TIMES), nil); Иногда, по не понятным для меня причинам, значение: (TimesEnd.IdleTime - TimesStart.IdleTime) = 10140065, хотя при sleep(1000) оно не может быть больше чем 10000000! Разница (дельта) между TimesEnd и TimesStart при этой странной ошибке выглядит так: IdleTime = 10140065 KernelTime = 10140065 UserTime = 0 DpcTime = 0 InterruptTime = 0 InterruptCount = 1034 P.S. Процессор двухядерный (Intel).
Всё правильно - там единица измерения 100 наносекунд, так что 1000 миллисекунд в sleep, это как раз ~10000000 с погрешностью 1,4% которые для sleep вполне нормальные.
Оказывает что: PriorityClass:= REALTIME_PRIORITY_CLASS; ThreadPriority:= THREAD_PRIORITY_TIME_CRITICAL; и timeBeginPeriod(1) не дает желаемого результата - точность задержки sleep(x). Тему можно закрывать.