Re[2]: поток и статический член класса
От: BuHHunyx Беларусь  
Дата: 02.12.04 14:09
Оценка: 6 (1)
Здравствуйте, MaximE, Вы писали:

ME>Потому, что статическая функция-член имеет такой же тип, как и обычная ф-ция (в отличее от нестатической фун-ции-члена). В win32 и POSIX ф-ция создания потока принимает указатель именно на обычную ф-цию. Но это вовсе не значит, что ты не можешь направить поток в ф-цию-член, просто для этого тебе придется использовать переходник, который будет перенаправлять поток в функцию-член:


ME>
ME>template<class T, DWORD(T::*mem_fun)()>
ME>inline
ME>DWORD WINAPI thread_to_member_thunk(void* p)
ME>{
ME>     return (static_cast<T*>(p)->*mem_fun)();
ME>}
ME>


ME>Используем:


ME>
ME>struct some
ME>{
ME>     DWORD f() { return 0; }
ME>};

ME>int main()
ME>{
ME>     some s;
ME>     // в качестве параметра (lpParam) передаем указатель на объект, чтобы переходник направил поток именно в этот объект
ME>     CreateThread(0, 0, thread_to_member_thunk<some, &some::f>, &s, 0, 0);
ME>}
ME>


Попробывал скомпилять данный пример в VS6sp6

E:\Projects\test\test.cpp(31) : error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__stdcall *)(void *)'
None of the functions with this name in scope match the target type

Где грабли?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.