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 |