CreateThread 함수 static으로 사용하지 않고 작성하기

CreateThread 함수를 사용하다 보면 하기와 같이 구성해야 한다.

1. 클래스내에서 사용시 Static 멤버함수로 작성

2. 클래스 멤버가 아닌 함수로 작성 해야만 한다.

 

그러나 클래스내 멤버 함수로 정의하여 사용하는 경우,

멤버 변수에 접근이 불가능 하지 않은가..?!!

 

그렇다고 static으로 선언하게 되면 그안에서 사용되는 함수는

모두 static으로 선언해야만 한다.. 헉~!!

 

해서, 구글해보니..

 

요렇게 하면 된다..

 

static으로 ThreadProc를 선언하고, 이 함수의 인수를 this로 넘겨준다음

ThreadProc에서 인수를 클래스로 캐스팅해서 원하는 함수(static아님)를 호출하면 된다.

 

//--------------------------------------------------------

1. Thread 생성한 후

Sample::Init() {
HANDLE hThreadID = ::CreateThread(NULL, 0, WrapThreadProc, (void*)this,

0, &m_dwLAF_Thread);
CloseHandle(hThreadID);

}

 

//---------------------------------------------------------------------
2. Thread processing for wrap
DWORD WINAPI Sample::WrapThreadProc(LPVOID lParam)
{
Sample *test = (Sample *)lParam;
return test ->ThreadProc();
}

 

//---------------------------------------------------------------------
3. Thread processing body.
bool Sample::ThreadProc()
{

실제 제어되는 부분 ^^

}

 

앗싸`~!!

 

+ Recent posts