Здравствуйте, 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
Где грабли?