Если ваша платформа и среда разработки поддерживают ее, то какая-то система асинхронного обмена сообщениями работает хорошо. Под Win32 я просто использую обычные сообщения Windows, которые я "публикую" (чтобы они не блокировали поток), и стандартная основная ветка сообщений пользовательского интерфейса собирает сообщения и обрабатывает их. Я также обычно определяю пользовательские сообщения.
Использование таймеров неоптимально, поэтому не нужно «опрашивать» такую информацию.