Какие объекты периодического таймера доступны в Windows API? - PullRequest
5 голосов
/ 21 сентября 2010

При изучении вариантов получения более высокого разрешения, чем разрешение 15 мс, предоставляемое объектами таймера .NET (см. /3089258/pochemu-taimery-net-ogranicheny-razresheniem-15-ms), Я смотрю на различные объекты таймера, которые предоставляет Windows. Я определил следующее:

Есть ли другие типы таймеров, доступные в Windows API?

1 Ответ

7 голосов
/ 22 октября 2010

Я задал этот вопрос, потому что был заинтересован в реализации периодического таймера, который дал бы мне более детальную детализацию, чем таймеры, поставляемые с .NET. Мое исследование этих таймеров (Windows.Forms.Timer, System.Timers.Timer и System.Threading.Timer) показывает, что лучшее, на что я могу надеяться, это гранулярность 15 мс и точность от -1 до +30 мс. Это нормально для большинства приложений, но не для приложения, над которым я работал.

Подробнее о моем исследовании см. Почему таймеры .NET ограничены разрешением 15 мс? и http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=815.

Это привело меня к поиску периодических объектов таймера, доступных в Windows. Я определил пять типов, которые я разместил в исходном вопросе. Я не нашел других. Я отказался от старого таймера Windows, потому что я не хочу обрабатывать сообщения. Затем я написал управляемые прототипы на C # для других четырех типов таймеров и провел некоторое тестирование.

Все четыре типа таймеров (мультимедийные таймеры, таймеры ожидания, таймеры очереди таймеров и таймеры пула потоков) дают надежный интервал в 1 мс с очень хорошим разрешением. Из них таймер Threadpool является наиболее простым для взаимодействия, но, к сожалению, он не поддерживается в Windows XP. Таймеры очереди таймеров имеют головокружительный набор опций, но если вы игнорируете большинство опций, они почти так же просты, как и таймеры Threadpool. См. Изучение вариантов для лучших таймеров для получения дополнительной информации.

Я решил обернуть таймер очереди таймера для своего общего класса таймера в .NET. Вы можете видеть это здесь .

Вас также могут заинтересовать Таймеры ожидания в .NET с C # .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...