vozn |
опубликован 06-06-2001 16:21 MSK
Не подскажет ли кто... В программе куча потоков, каждый поток создает экземпляр класса. Конструктор класса должен создать таймер Я это делаю так: 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
Конечно не хочет и не будет, функция обязательно должна быть статической. Но есть два варианта выхода из этой ситуации : 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 |