As the title says. The following is my code skeleton.
class CLASS
{
public:
void A();
private:
DWORD WINAPI B(LPVOID);
};
void CLASS::A()
{
DWOR
You have to make that member function static
.
The problem here is that every non-static member function has an implicit this
parameter and that's in fact what the compiler is trying to tell you - your nin-static member function has signature different from the one you expected.
Also see this answer to a closely related question.
You've to define your callback function as static
function if it's member function!
From my previous answer: (with little modification)
Even better would be to define a reusable class with pure virtual function run()
to be implemented by the derived thread classes. Here is how it should be designed:
//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.....*/
}
}
Seriously, use std::thread (or boost::thread if your compiler doesn't support it yet):
class CLASS
{
public:
void A();
private:
void B(your args go here);
};
void CLASS::A()
{
boost::thread(&CLASS::B, this, your args go here);
}