1.요약 CWinThread로 UI Thread를 만드는 방법과 주의해야 할 점 수록!! 2.본문 CWinThread를 사용해서 스레드를 만드는 방법은 2가지가 있습니다. (1) AfxBeginThread() - Worker Thread (2) CWinThread::CreateThread() - UI Thread 우리가 취해야 할 방법은 2번입니다. AfxBeginThread()를 사용하는 경우에는 API인 CreateThread나 CRT인 _beginthread()처럼 스레드 입구 함수( entry-point)를 지정할 수 있습니다. 그러면 새 스레드는 그 함수를 실행하면서 시작된다고 볼 수 있습니다. 2번 방법인 CWinThread::CreateThread() 를 사용하는 경우에는 스레드 입구 함수를 넘겨줄 수 있는 인자는 없습니다. 다음과 같은 방법으로 해야되겠죠. (1) CWinThread를 상속받는 클래스를 만든다. ==> 예를 들어서 CUIThread 라고 합시다. (2) CUIThread::InitInstance()를 스레드 입구 함수로 보고 그곳에 필요한 코드를 넣습니다. 아마도 메인 윈도우를 만들어서 저장시키는 등의.. ( 여러분이 줄곧 CWinApp-based 클래스의 InitInstance() 에서 했던 일들이겠죠) 끝입니다. UI Thread이기 때문에 메인 윈도우가 죽으면서 PostQuitMessage() 를 해주면 스레드가 종료하겠죠. 스레드 종료시 CWinThread 객체는 디폴트로 자기자신의 메모리를 해제하도록 되어있습니다. 그러니까 만약에 CWinThread-based 클래스의 객체를 Heap( new나 malloc()으로 할당한경우)이 아닌 곳에 생성했다면 문제가 발생하겠죠. 이는 다음과 같은 간단한 조치로 막을 수 있습니다. CWinThread-based 클래스의 생성자에서 가볍게 다음과 같이 해주면 됩니다. m_bAutoDelete = FALSE;3.예제 4.참고 MSDN - CWinThread overview |
'Programming > MFC' 카테고리의 다른 글
레지스트리에 등록하고 편리하게 사용 (0) | 2006.01.12 |
---|---|
MFC CWinThread를 이용할때 주의할 사항 (0) | 2006.01.07 |
DDX (0) | 2006.01.03 |
글꼴 만들기 (CreateFont함수 인자 설명) (0) | 2006.01.03 |
에디트박스(Edit Box)의 폰트변경 (0) | 2006.01.03 |