Thread functions must be static. But you can use a static wrapper function that calls a non-static member function when passing a pointer to your class:
CThreadClass
{
void start_thread();
private::
unsigned __stdcall start_address(void* obj);
unsigned thread_func();
};
void CThreadClass::start_thread()
{
m_hThread = (HANDLE)_beginthreadex(NULL,0, &CThreadClass::start_address, this, 0, &m_Thraddr);
}
unsigned CThreadClass::start_address(void* obj)
{
CThreadClass *p = (CThreadClass *)obj;
return p->thread_func();
}
unsigned CThreadClass::thread_func()
{
return FALSE;
}