Таймер сообщения в MFC / Win32 - PullRequest
1 голос
/ 07 апреля 2009

Я просто пробовал метод SetTimer в Win32 с некоторыми низкими значениями, такими как 10 мс в качестве периода ожидания. Я рассчитал время, необходимое для получения 500 событий таймера, и ожидал, что оно составит около 5 секунд. Удивительно, но я обнаружил, что для получения этих многих событий требуется около 7,5 секунд, что означает, что время ожидания составляет около 16 мс. Есть ли какие-либо ограничения на значение, которое мы можем установить для периода ожидания (я не смог найти ничего в MSDN)? Кроме того, другие процессы, выполняющиеся в моей системе, влияют на эти сообщения таймера?

Ответы [ 4 ]

5 голосов
/ 07 апреля 2009

OnTimer основан на WM_TIMER сообщении, которое имеет низкий приоритет, то есть оно будет отправлено только тогда, когда нет другого ожидающего сообщения.

Также MSDN объясняет, что вы не можете установить интервал меньше USER_TIMER_MINIMUM, что составляет 10.

Независимо от того, что планировщик будет соблюдать квант времени.

3 голосов
/ 07 апреля 2009

Windows не является операционной системой реального времени и не может справиться с такой точностью (интервал 10 мс). Сказав это, существует несколько видов таймеров , и некоторые из них имеют лучшую точность, чем другие.

1 голос
/ 07 апреля 2009

Вы можете изменить гранулярность системного таймера до 1 мс - это предназначено для работы MIDI.

По сути, мой опыт работы с w2k заключается в том, что любой запрошенный период ожидания менее 13 мс возвращает ожидание, которое колеблется в случайном порядке между двумя значениями, 0 мс и 13 мс. Таймеры длиннее, чем обычно, очень точны. Ваши 500 событий таймера - некоторые были 0 мс, некоторые были 13 мс (при условии, что 13 мс по-прежнему верны). Вы закончили с нехваткой времени.

0 голосов
/ 08 апреля 2009

Как уже говорилось, Windows не является операционной системой реального времени. Просить его сделать что-нибудь и ожидать этого в определенное время позже - глупое поручение. При настройке таймера окна просят красиво запустить событие WM_TIMER, как только пройдет время, насколько это возможно. Это может быть после того, как другие потоки рассмотрены и выполнены. Поэтому фактическое время, чтобы увидеть событие WM_TIMER, невозможно предсказать реалистично - все, что вы знаете, это> установленное вами время .... Оформить заказ на Windows

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