본문 바로가기

개발/mfc

mfc-Dialog 를 UI Thread 로 만들기, sample source

반응형

환경: vs2010

 

가. 배경

같은 다이알 로그를 여러개 만들 경우, 각각 동작을 원활히 하기 위해서는 Thread 로 만들어야 한다.

그 이유중 하나는 Timer 를 쓰는 경우, 쓰레드를 쓰지 않으면 동작을 안 하기 때문 이다.

 

1. MFC 의 쓰레드는 2가지가 있는데, 

1). UI Thread

2). Worker Thread (사용자 스레드)

 

여기에 적합한 것은 UI Thread 이므로 이를 만드는 것을 한다.

2. UIThread 란 ?

1) UI Thread로 다이얼로그를 실행

2) Thread 제어

3) 일시중지 클릭 시 UIThreadDlg 응답 없음

4) 재개를 누르면 다시 UIThreadDlg 정상화

5) 종료 시 UIThreadDlg 소멸

 

 

나. 작업 순서

1. UI Thread 만들기 ( base dialog 에서 ) : 명칭= C_UiThread

2. UI Thread에서 생성할 Dialog 객체를 헤더  C_UiThread .h 에 추가한다.

3. C_UiThread.cpp 수정

4. 주 Dialog 수정( Thread 부르기, 종료 하기 등)

 

다. UI thrad 만들기

1. 클래스 마법사로 Dialog를 생성할 Thread를 생성한다 (CWinThread 상속)

   > VS의 원하는 프로젝트 띄우고 >  Project > Class Wizard ( Ctrl-Shift- X )

> 클래스 위자드 팝업에서 > [Add Class] 버튼 누르면  Add Class Wizard 가 생긴다

 

> Add Class Wizard 에서 

1. Bass Class  로 CWinThread 를 선택

2. Class Name 으로 (맘대로 쓸 수 있으나 첫자는 C로 하는 것이 좋다 ) 편의상 C_UiThread 로 쓰면

3. ~.h 파일과 ~.cpp 파일이 자동으로 지정된다.

   - 뭐 기존 파일 명을 쓰면 그 파일에 추가 된다 ?

4. [Finish] 를 누른다   그럼  C_UiThread.cpp , .h 파일이 생긴다.

> 클래스 위자드 팝업에서 > [OK] 버튼을 누른다. 

 

 

2. UI Thread에서 생성할 Dialog 객체를 헤더에 추가한다.

C_UiThread.h
0.00MB

 

 

 

 

 

3. C_UiThread.cpp 수정

C_UiThread.cpp
0.00MB

 

 

 

1) InitInstance() 함수에 Dialog를 생성하는 코드를 추가한다

2) 스레드가 종료될 때 다이얼로그를 소멸시키는 코드도 추가한다.

참고로 생성된 다이얼로그를 종료시켜도 스레드가 종료되진 않는다.

다만 눈에 안보이는 것일뿐

 

4. 주 Dialog 수정( Thread 부르기, 종료 하기 등)

반응형