Threading a Member function

I am trying to create a thread from inside a class using another class member.  Here is an example of what I want to do.  The function I want to thread is of type "unsigned long _stdcall A::one(LPVOID)" which would work if I didn't have the "A::" scope operator.  Can I type cast this and remove the scope operator?
Or since the CreateThread function is not a member of the class A, it would violate the Data Abstraction that exists inside classes.  But that should be a runtime error not a compile error, right?

class A{
  unsigned long _stdcall two(LPVOID);
  int hThread;
  HANDLE ThreadID;
unsigned long _stdcall A::two(LPVOID D){
  //Do Some Stuff
void A::one(){
  char buff[100];
  void *data=&buff;
  hThread=CreateThread (NULL, 0, two, data, 0, &ThreadID);
Who is Participating?
chensuConnect With a Mentor Commented:
Make the function as a static function of class A or a global function.
class A{
static unsigned long _stdcall two(LPVOID);

You have to use a static function or a global function for a thread. The reason is that a member function contains an implicit parameter (the this pointer).
For example,

unsigned long _stdcall two(LPVOID);  // member function of class A

is actually

unsigned long _stdcall two(class A *pThis, LPVOID);

if it is not a static function. And this prototype does not conform to what CreateThread() requires.  

You can pass some data that the thread needs into the structure pointed by LPVOID pParam.
What I usually do in this type of situation is to use a global function that's a frind of the class.  Then I pass the object in as the data and then cast it to a "SurrogateThis".
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.