Фактически указанная вами таблица неверна для QueryPerformanceCounter. QPC (для краткости) реализована в трех возможных источниках синхронизации: 1: HPET, таймер ACPI 2: PM, 3: RDTSC. решение основано на эвристике в зависимости от условий, параметров загрузки ядра, ошибок в BIOS и ошибок в коде ACPI, предоставляемом чипсетом. Все эти ошибки обнаруживаются на каждой аппаратной основе в лабораториях Microsoft. Программисты Linux и BSD должны сами по себе найти жесткий диск и, как правило, должны переписывать код ACPI для устранения ошибок. Сообщество linux стало ненавидеть RDTSC, а также ACPI по разным причинам. Но в любом случае ...
TimeReadTime отличается от GetTickCount, потому что для стабильности в соответствии с тем, как указано в документации GetTickCount, его поведение не может быть изменено. Тем не менее, в некоторых случаях для улучшения качества таймера в окне необходимо было улучшить разрешение тика. (таймер работает с сообщениями, отправляя в приложение GetMessage или PeekMessage, а затем вступает в хороший обратный вызов для обработки таймера). Это необходимо для мультимедиа, например, для аудио/аудио синхронизации.
Очевидно, что игра или программирование в реальном времени требуют лучшей точности даже когда-то и не могут использовать таймеры. Вместо этого они используют ожидание, или они спят только в одном случае: VSync через вызов OpenGL или DirectX uppon backbuffer/frontbuffer swapping. Видеодрайвер просветит ожидающий поток вверх по сигналу VSync с самого экрана. Это сон, основанный на событии, как таймер, но не основанный на прерывании таймера.
Следует отметить, что современные ядра имеют динамическое тикание (безъядерное ядро, из окон 8 или linux 2.6.18). Наилучшая частота прерывания тика не может быть увеличена до 1 мс, чтобы избежать засорения, но верхнего предела нет. если ни одно приложение не запускается и не отправляет событие синхронизации, тогда машина может спать неограниченное время, позволяя ЦП перейти в самое глубокое состояние сна (состояние расширенной скорости C7 с расширенной скоростью). После чего следующее пробуждение, в большинстве случаев, происходит из-за прерывания устройства, в основном USB. (перемещение мыши или другие вещи)
Связанные чтения: http://blogs.msdn.com/b/larryosterman/archive/2009/09/02/what-s-the-difference-between-gettickcount-and-timegettime .aspx –
Я не понимаю, почему на Земле вы ожидали бы, что две * разные функции winapi будут вести себя одинаково? Если бы он был * разработан * одинаковым, то, конечно, не было бы необходимости добавлять отдельную функцию. –
@CodyGray благодарит за информацию. Как отметил автор: «KeGetTickCount получает кол-во счетчиков, KeQueryInterruptTime получает время подсчета прерываний». В чем разница между количеством тиков и временем прерывания? Я озадачен тем, что сколько таймеров использует окна? – ajaxhe