Login | Register   
RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

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



Application Security Testing: An Integral Part of DevOps

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
	int i,j,k;

	//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.



Thanks for your registration, follow us on our social networks to keep up-to-date