Поддерживаются ли таймеры собственным Windows API? - PullRequest
4 голосов
/ 18 мая 2010

Поддерживает ли собственный Windows API таймеры?

Мне известно, что реализации POSIX в Windows поддерживают таймеры, но мне интересны API Windows SDK.

Ответы [ 4 ]

10 голосов
/ 18 мая 2010

Да, в Win32 API есть таймеры.Более подробную информацию вы можете проверить здесь: Таймеры

В частности, вам необходимо проверить

4 голосов
/ 18 мая 2010

Это действительно так: http://windows -programming.suite101.com / article.cfm / using_the_win32_timer_api

API SetTimer, упомянутый в этой статье, зависит от сообщения WM_TIMER, что означает, что у вас должен быть цикл обработки сообщений, что означает, что у вас (вероятно) должно быть окно. Так что это очень полезно для программирования GUI, в меньшей степени для инструментов командной строки.

3 голосов
/ 18 мая 2010

В дополнение к описанным выше таймерам существует также высокое разрешение timeSetEvent (API мультимедиа) & CreateTimerQueueTimer.

2 голосов
/ 19 мая 2010

На этот вопрос сложно ответить в контексте таймера POSIX. API окна SetTimer создает таймер в потоке графического интерфейса, который опирается на механизм диспетчеризации очереди сообщений потока - это означает, что где-то в потоке вы вызываете GetMessage / DispatchMessage.

Если вы пишете код не-GUI, необходимость реализовать цикл сообщений является неестественным ограничением: - Ядро Windows использует объекты синхронизации (вместо сигналов) в качестве способа для рабочих потоков (то есть не-GUI) быть предупреждены о событиях. CreateWaitiableTimer создаст дескриптор, который может быть передан WaitForSingleObject / WaitForMultipleObjects в рабочем потоке.

Кроме того, вы можете создать рабочий поток - внедрить в него таймер (GUI или ядро) и просто вызвать ваш (очевидно, это должен быть потокобезопасный) объект, когда таймер сигнализируется.

Выбор действительно зависит от того, насколько точно будет POSIX-подобное приложение.

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