C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Нетология

 Использоание таймеров в потоках / Процессы и потоки / Приложение

опубликован 06-06-2001 16:21 MSK   Click Here to See the Profile for vozn   Click Here to Email vozn  
Не подскажет ли кто...
В программе куча потоков, каждый поток создает экземпляр класса.
Конструктор класса должен создать таймер
Я это делаю так:
timer=::SetTimer(NULL, 0, 500, (TIMERPROC)MyTimer);
В классе :
public : VOID CALLBACK MyTimer(HWND hwnd, UINT uiMsg, UINT idEvent, DWORD dwTime);
Статической эту процедуру сделать не могу - нужно чтобы в каждом потоке был отдельный таймер.А так - компилироваться не хочет.
OlegN опубликован 06-06-2001 17:26 MSK     Click Here to See the Profile for OlegN  Click Here to Email OlegN     
Конечно не хочет и не будет, функция обязательно должна быть статической.
Но есть два варианта выхода из этой ситуации :
1-й
передавать this объекта как idEvent
timer=::SetTimer(NULL, (UINT)this, 500, (TIMERPROC)MyTimer);
объявить функцию в классе как статическую
и в ней получать this следующим образом :

void MyTimer(HWND hwnd, UINT uiMsg, UINT idEvent, DWORD dwTime)
{
CMyClass* pThis = (CMyClass*)idEvent;
}

2-й
если в потоке таймер ОДИН и только ОДИН,
то для хранения this объекта ты можешь
использовать TLS (thread local storage)
см. функции TlsAlloc, TlsFree, TlsSetValue, TlsGetValue




Letyshops [lifetime]