환경: 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 객체를 헤더에 추가한다.
3. C_UiThread.cpp 수정
1) InitInstance() 함수에 Dialog를 생성하는 코드를 추가한다
2) 스레드가 종료될 때 다이얼로그를 소멸시키는 코드도 추가한다.
참고로 생성된 다이얼로그를 종료시켜도 스레드가 종료되진 않는다.
다만 눈에 안보이는 것일뿐
4. 주 Dialog 수정( Thread 부르기, 종료 하기 등)
'개발 > mfc' 카테고리의 다른 글
MFC 메모리 릭 체크시 유용한 방법 2개 (0) | 2023.10.25 |
---|---|
[MFC] Cstring 유니코드 멀티바이트 UTF-8 문자열 인코딩 변환 모음(퍼옴) (1) | 2023.10.25 |
[mfc] control 값 가져오기 설정 하기, sample source (0) | 2023.10.20 |
Visual Studio 2010 C++ code formatter (2) | 2023.10.19 |
MFC vs2010 : Ontimer와 SetTimer, KillTimer (0) | 2023.09.06 |