SetTimer с параметрами

Тема в разделе "WASM.WIN32", создана пользователем zdacom, 18 авг 2010.

  1. zdacom

    zdacom New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2008
    Сообщения:
    18
    Назрел такой вопрос, нужно чтобы при получении некоторого события в функции (событием является некоторый ID) происходил вызов таймера, выполняющий действия через некоторый интервал, причем нужно чтобы этот таймер зависил не только от параметров времени, но и от этого ID. Таких таймеров может быть очень много (например, столько сколько пользователей подключено к серверу).

    Вопрос: Как по-другому можно это реализовать без глобальных переменных? Ну или натолкните, потому как параметры SetTimer не принимает дополнительных параметров типа ~USERDATA:

    Код (Text):
    1. UINT SetTimer(
    2.  
    3.     HWND  hwnd, // handle of window for timer messages
    4.     UINT  idTimer,  // timer identifier
    5.     UINT  uTimeout, // time-out value
    6.     TIMERPROC  tmprc    // address of timer procedure
    7.    );
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.321
    TLS (Thread Local Storage) не подходит?
    http://msdn.microsoft.com/en-us/library/ms686749%28VS.85%29.aspx
     
  3. zdacom

    zdacom New Member

    Публикаций:
    0
    Регистрация:
    22 ноя 2008
    Сообщения:
    18
    Да, подходит! Тогда CreateThread и SetWaitableTimer, WaitForSingleObject? Мне же нужно чтобы таймер повторялся через определенное время. И зациклить это до некоторого события (оно обязательно произойдет).

    Я правильно понял?
     
  4. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Если таймеров предполагается очень много, от SetTimer лучше воздержаться. Он может не давать достаточной точности при сильной загрузке проца, а на старых ОС и вообще встать колом. Можно использовать timeSetEvent, у него есть отдельный параметр для данных пользователя.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    SetTimer() это надстройка над сервисом шадова, юзается если нужно сообщения доставлять в винпроц. Там можно указать ID. Вобще есть NtSetTimer, для этого таймера можно указать пользовательский параметр для APC.