MFC/기초

MFC) CWinThread 상속/시작/종료 정리

tislqhf 2017. 1. 10. 10:08
반응형



CWinThread

- MFC 기본 제공 클래스.

- 스레드 생성 시 이 클래스를 상속받아서 생성.


- 상속해서 구현해야 할 3가지 항목

 virtual BOOL InitInstance();

 virtual int ExitInstance();
 virtual int Run();


InitInstance()

CreateThread() 시 실행. 만약 

1) pThread->CreateThread(CREATE_SUSPEND);

2) pThread->SuspendThread();

한다면 InitInstance()함수는 타지 않는다. 주의!!

ExitInstance()

스레드 종료 시 실행. 호출 가능.

- Run()

InitInstance() 에서 return TRUE; 시 실행. TRUE를 리턴하지 않으면 실행되지 않으며, 내부에
스레드 동작 시 원하는 코드 삽입 가능. Run()함수가 돌아야 메시지 맵이 동작함. PostThreadMessage 로 메시지를 날렸는데 스레드에서 인식하지 못한다면 확인 해보길.

Run() 함수는 반드시 구현하지 않아도 된다. 스레드를 메시지루프 용도로만 사용할 시 따로 구현하지 않아도 됨.

[Header에 반드시 필요한 부분]
DECLARE_DYNCREATE(MyClass );
IMPLEMENT_DYNCREATE(MyClass , CWinThread)

메모리 동적 할당을 위함. 없으면 메모리부족 에러 발생.

[메시지 맵 사용 희망 시]
(header)

DECLARE_MESSAGE_MAP()
(soruce)
BEGIN_MESSAGE_MAP(MyClass, CWinThread)
 //ON_THREAD_MESSAGE
END_MESSAGE_MAP()

[스레드 시작]
1. pThread = (MyClass *)AfxBeginThread(RUNTIME_CLASS(MyClass ));

   pThread->PostThreadMessage(WM_MYTHREADMESSAGE, NULL, NULL)

2. pThread = new MyThread()

   pThread->CreateThread(); or pThread->CreateThread(CREATE_SUSPEND);


[스레드 일시 중지]

pThread->SuspendThread();


[스레드 종료]

1. pThread->ExitInstance();

   delete pThread;

2. ((MyThread*)pThread)->PostThreadMessage(WM_QUIT, 0 0);


반응형