Цикл событий в C ++ в Windows с очередью таймера - PullRequest
0 голосов
/ 06 июня 2011

Я пишу Windows DLL на C ++, и мне нужен какой-то цикл обработки событий. Несколько событий периодически проверяются, и затем DLL вызывает обратные вызовы в клиентском приложении. Период опроса может отличаться для разных событий.

Интересно, как лучше всего это закодировать. Точность синхронизации должна быть хорошей, но производительность является основным приоритетом. Лучше иметь несколько (4-5) таймеров в одной очереди Windows таймер с различными периодами или один таймер с наименьшим периодом? Или мне лучше другое решение?

Спасибо

Ответы [ 2 ]

0 голосов
/ 06 июня 2011

Чтобы напрямую ответить на вопрос, вы можете установить таймер с помощью SetTimer , который принимает nIDEvent, который обычно регистрируется в дескрипторе окна.Затем в это окно поступят сообщения WM_TIMER с зарегистрированным идентификатором wParam.Вы должны уничтожить таймер, когда закончите с ним с помощью KillTimer .WM_TIMER имеет степень детализации около 10-15 мс в системах Windows NT.

Как говорили другие авторы, вам, вероятно, будет лучше с системой, основанной на реальных событиях.Возможно, вы могли бы отредактировать свое сообщение с использованием регистрационного варианта, и можно было бы предложить более эффективные ответы.

0 голосов
/ 06 июня 2011

Какая производительность является основным приоритетом?Повторяемая, точная синхронизация ошибается ... «очень сложно» в ОС общего назначения, такой как Windows, из-за многочисленных прерываний драйверов.Существуют различные механизмы таймера, которые могут генерировать очень точные таймауты , но ненадежно .Сколько джиттера вы можете терпеть?В каком диапазоне находятся ваши интервалы?Должны ли обратные вызовы быть в каком-то конкретном контексте потока, или что-нибудь может вызывать события?

...