프로그래밍

C++ 클래스 내부에서의 스레드 함수 사용법

c++ 내부에서 스레드함수를 선언 할 때에는 static으로 선언해서 사용해야 한다고 알고 있다. 하지만 static으로 선언할 경우에는 스레드 함수에서 멤버변수를 사용할 수가 없다. 이럴때에 아래의 방법으로 사용하시면 멤버변수에 접근가능한 스레드함수를 생성하실 수 있다. 안전해보이는 코딩법은 아니다.

class ClassA
{
private:
	HANDLE m_hThreadA;     //스레드 핸들
	DWORD m_dwThreadAId;

public:
	ClassA(void);
	~ClassA(void);

	BOOL InitFunc(void);

	static DWORD WINAPI ThreadA(LPVOID lpArg);
	DWORD ThreadA(void);
}

BOOL ClassA::InitFunc(void)
{
	BOOL bReturn = TRUE;

	m_hThreadA = ::CreateThread(
		NULL,
		NULL,
		ThreadA,
		LPVOID(this),
		NULL,
		&m_dwThreadAId
		);

	if(m_hThreadA == NULL)
	{
		bReturn = FALSE;
	}

	return bReturn;
}

DWORD WINAPI ClassA::ThreadA(LPVOID lpArg)
{
	ClassA* pThis = reinterpret_cast<ClassA*>(lpArg);

	return pThis->ThreadA();
}

DWORD ClassA::ThreadA(void)
{
	// TODO:

	return 0;
}


'프로그래밍' 카테고리의 다른 글

The funny page table terminology on AMD64  (0) 2014.06.03
vmxon 사용시 주의점  (0) 2014.04.14
TSC(Time Stamp Counter)란?  (0) 2014.04.04
20140402 구디역 벚꽃 산책코스  (0) 2014.04.02
This function is thread-safe.  (0) 2014.03.20