несколько :: setTimer в C ++ - PullRequest
1 голос
/ 28 июня 2011

Мне нужно более одного таймера, используя функцию :: SetTimer, имеющую один и тот же EventID. Возможно ли / хорошая идея создать несколько дескрипторов окна с помощью :: CreateWindow, а затем назначить каждый таймер созданным дескрипторам окна? Любой другой выбор?


Редактировать: В любом случае, я только хочу знать, что здесь происходит:

int eventID = 0;
hWnd1 = ::CreateWindow(...);
hWnd2 = ::CreateWindow(...);
::SetTimer(hWnd1, eventID, ...);
::SetTimer(hWnd2, eventID, ...);

У каждого hWnd есть свой собственный список eventID? и они обрабатываются независимо? Я не хочу обсуждать, имеет ли этот дизайн смысл или нет ..

Ответы [ 3 ]

3 голосов
/ 28 июня 2011

С http://msdn.microsoft.com/en-us/library/ms644906%28v=vs.85%29.aspx

Идентификатор таймера, nIDEvent, есть специфично для связанного окна. Другое окно может иметь свой таймер который имеет тот же идентификатор, что и Таймер принадлежит другому окну. таймеры различны.

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

Вы действительно хотите два окна?Вы можете установить два таймера в одном окне.Вы можете определить, какой таймер сработал, используя параметр ID обработчика WM_TIMER (OnTimer () в MFC).Пожалуйста, рассмотрите этот способ, если вам не нужен высокоточный таймер.

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

Если вы используете один и тот же EventID, вы сможете использовать один и тот же таймер, но с разными интервалами.Вы можете просто убить старый с помощью KillTimer () , а затем создать еще один с помощью SetTimer () , который срабатывает более или менее часто.Если у вас возникла ситуация, когда это невозможно, то вполне вероятно, что в дизайне вашей программы есть изъян.

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

Конечно, таймер фактически не требует, чтобы вы ассоциировали hWnd с ним.HWnd является необязательным, и вы можете вместо этого связать свой таймер с обратным вызовом (lpTimerFunc).

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