본문 바로가기

Programming/MFC

AfxBeginThread 생성시 C2440 error 대처법

1. thread 생성시 다음 2가지 방법으로 생성 할 수 있다.

  - 전역 함수일 경우

  UINT  ThreadProc( LPVOID pParam )

  {

  }

  - static 멤버일 경우

  class Test

  {

   public:

       static UINT ThreadProc( LPVOID pParam ) ;

   } ;

 

  UINT Test::ThreadProc( LPVOID pParam )

  {

  }

 

 

2. C2440 error 발생시

 

사용자 삽입 이미지

 

 

호출 규칙의 정의

 __cdecl  : C 스타일

 __stdcall  : C++ 스타일

 

Thread 생성시 CreateThread나,AfxBeginThread함수를 쓰는데

이 때, 쓰레드 함수가 인자로 들어간다.

함수도 주소값이 있기때문에 이를 위해 보통 타입캐스팅을 해서 함수가 가리키고 있는

주소값을 던져주기도 한다.

그런 경우를 위해 함수 포인터를 파라미터로 던져줄때 다음과 같이 타입캐스팅을 해야한다.

 

CWinThread* pThread = ::AfxBeginThread((void*)Func, this, THREAD_PRIORITY_NORMAL); 

 

 --> CWinThread* pThread = ::AfxBeginThread((AFX_THREADPROC)Func, (LPVOID)this, THREAD_PRIORITY_NORMAL);