2014-08-29 3 views
2

Я хочу установить таймер для окна, но я не знаю, работает ли в этом окне таймеры. Если это так, я не хочу перезаписывать ни один из них, поэтому мне нужно выбрать идентификатор таймера, который является бесплатным. MSDN не помогает в моем случае, они описывают почти все перестановки EXCEPT, если у вас есть hwnd и вы не хотите заменять таймер.SetTimer с уникальным идентификатором

Так что, если вы можете дать 0 или что-то в качестве nIDEvent и Windows автоматически создаст новый идентификатор uniqe, или если есть какой-то способ отображать текущие таймеры, чтобы я мог избежать использования каких-либо из них?

MSDN для SetTimer: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644906%28v=vs.85%29.aspx

+2

Единственный способ автоматического создания идентификатора таймера - это таймер потока, который не привязан к определенному окну. –

+4

У вас мало поводов для этого, просто создайте собственное окно. –

ответ

0

Как сказал Поттер @ Джонатан, вы можете написать что-то вроде:

VOID CALLBACK TimerCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) 
{ 
    BOOL bRetKill = ::KillTimer(NULL, idEvent); 
    // do something 
} 

void CSomeModel::StartTimer() 
{ 
    UINT_PTR hSetTimer = ::SetTimer(NULL, 0, 1000, TimerCallback); 
} 

каждый раз :: SetTimer называется, то idEvent ID будет уникальным.

+1

Имейте в виду, что таймеры потоков не будут работать, когда поток заблокирован, ожидая закрытия всплывающего меню окна сообщения. В то время как таймеры, связанные с окном владельца, будут работать нормально. – GetFree

Смежные вопросы