Вы должны определить свою функцию обратного вызова как static
функцию, если она является функцией-членом!
Лучший дизайн: определить класс многократного использования!
Из моего предыдущегоответ : (с небольшими изменениями)
Еще лучше было бы определить класс для повторного использования с чистой виртуальной функцией run()
, который будет реализован производным потоком классы.Вот как это должно быть оформлено:
//runnable is reusable class. All thread classes must derive from it!
class runnable
{
public:
virtual ~runnable() {}
static DWORD WINAPI run_thread(LPVOID args)
{
runnable *prunnable = static_cast<runnable*>(args);
return prunnable->run();
}
protected:
virtual DWORD run() = 0; //derived class must implement this!
};
class Thread : public runnable //derived from runnable!
{
public:
void newthread()
{
CreateThread(NULL, 0, &runnable::run_thread, this, 0, NULL);
}
protected:
DWORD run() //implementing the virtual function!
{
/*.....your thread execution code.....*/
}
}