Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: C++
Expertise: Intermediate
Feb 2, 2001

Accessing Class Members From the Static Member Function


When a class has Thread entry functions, it is usually declared as static member functions of the class as in the example below:
 
Class A
{
private:
	int i,j,k;

public:
	//Thread Entry function
	static DWORD WINAPI ThreadFunc(PVOID p);

	//other functions
	void SomeFunc();
}

The implementation of the function does not allow access to the class members since this is a static function. One solution is to pass the class object itself as a parameter of the thread function and access the class members through the pointer passed.

The thread may be created from SomeFunc()
 
void SomeFunc()
{

	...
	...

	CreateThread (NULL, 1024, A::ThreadFunc, this, CREATE_SUSPENDED, &_tid);
	...
	...

}


DWORD A::ThreadFunc(VOID * p)
{
	A * pA = (A *)p;

	//access members thru pA

	pA->i = pA->j + pA->k;

	return 0;
}

This approach is difficult since the object has to be de-referenced every time especially if the object is being used heavily inside the function. An easier way is to add a member function DWORD DoThreadFunc() to the class. From the original ThreadFunc, make a call to DoThreadFunc and do all the processing in DoThreadFunc as shown below.
 
DWORD A::ThreadFunc(VOID * p)
{
	return pA->DoThreadFunc();
}

DWORD A::DoThreadFunc()
{
   i = j+k;
   return 0;
}

From DoThreadFunc(), we can access the class members directly. This will make the code look more readable without unwanted ->s
Rajesh Chathapuram
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap