Назрел такой вопрос, нужно чтобы при получении некоторого события в функции (событием является некоторый ID) происходил вызов таймера, выполняющий действия через некоторый интервал, причем нужно чтобы этот таймер зависил не только от параметров времени, но и от этого ID. Таких таймеров может быть очень много (например, столько сколько пользователей подключено к серверу). Вопрос: Как по-другому можно это реализовать без глобальных переменных? Ну или натолкните, потому как параметры SetTimer не принимает дополнительных параметров типа ~USERDATA: Код (Text): UINT SetTimer( HWND hwnd, // handle of window for timer messages UINT idTimer, // timer identifier UINT uTimeout, // time-out value TIMERPROC tmprc // address of timer procedure );
TLS (Thread Local Storage) не подходит? http://msdn.microsoft.com/en-us/library/ms686749%28VS.85%29.aspx
Да, подходит! Тогда CreateThread и SetWaitableTimer, WaitForSingleObject? Мне же нужно чтобы таймер повторялся через определенное время. И зациклить это до некоторого события (оно обязательно произойдет). Я правильно понял?
Если таймеров предполагается очень много, от SetTimer лучше воздержаться. Он может не давать достаточной точности при сильной загрузке проца, а на старых ОС и вообще встать колом. Можно использовать timeSetEvent, у него есть отдельный параметр для данных пользователя.
SetTimer() это надстройка над сервисом шадова, юзается если нужно сообщения доставлять в винпроц. Там можно указать ID. Вобще есть NtSetTimer, для этого таймера можно указать пользовательский параметр для APC.