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{
  one();
  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);
  }
lordxAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

chensuCommented:
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.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
md041797Commented:
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".
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
C++

From novice to tech pro — start learning today.