티스토리 뷰
Visual Studio 2012 사용
스레드(Thread)를 활용해보자. 스레드 한개를 미리 생성해서 대기시켜놓고, Run명령을 통해 작동/중지시키고 Stop명령을 통해 스레드를 종료하는 방법까지 다뤄본다.
1. 선언
// header.h CWinThread *m_pThread; HANDLE hThread; bool m_bRun, m_bStop; static UINT RunThread(LPVOID pParam); //...
m_pThread을 통해 스레드를 시작하고, hThread에 해당 핸들을 넣는다.
m_bRun, m_bStop으로 스레드를 시작하거나 종료하는 구문을 넣는다.
RunThread는 스레드 시작시 사용할 함수 원형이다.
2. 정의
1) OnInitDialog
// main.cpp BOOL 클래스이름::OnInitDialog() { CDialogEx::OnInitDialog(); ... // TODO: 여기에 추가 초기화 작업을 추가합니다. if(m_pThread==NULL) { m_pThread = AfxBeginThread(RunThread, this); hThread = m_pThread->m_hThread; m_bStop=false; m_bRun=false; if(!m_pThread) { AfxMessageBox(_T("Thread could not be created,")); return; } } return TRUE; // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다. } //...
OnInitDialog 함수에서 스레드를 시작하는 루틴을 넣는다. 스레드의 핸들, 변수 초기화 등등을 진행한다.
AfxBeginThread를 통해 스레드를 시작하였고, 파라미터로 스레드 함수는 RunThread를 명시하고, this를 통해 메인클래스의 주소값을 넘겨준다.
2) 대화상자 소멸시의 스레드 처리
// main.cpp void 클래스이름::OnDestroy() { CDialogEx::OnDestroy(); if(m_pThread!=NULL) { m_bStop=true; m_pThread = NULL; } } //...
대화상자에서 WM_DESTROY 메시지 처리기를 추가하여 위와 같이 코딩한다.
대화상자 종료시 스레드가 종료되지 않았다면 종료하는 루틴이다.
보통 CWinThread변수에 NULL을 넣으면 제거 된다는데 이상하게 안된다.
그래서 m_bStop을 활용하여 스레드 함수 내에서 종료하는 방법도 같이 포함한다.
3) 스레드 함수
// main.cpp UINT 클래스이름::RunThread(LPVOID pParam) { 클래스이름 *g_pDlg = (클래스이름*)pParam; while(1) { if(g_pDlg->m_bRun==true) { //작동 함수 } if(g_pDlg->m_bStop==true) { return 0; } } return 0; } //...
위의 AfxBeginThread(RunThread, this); 구문을 통하여 g_pDlg에 메인클래스 대화상자 포인터를 전달받는다.
전달받은 g_pDlg 포인터를 통해 메인클래스의 변수에 접근할 수 있게된다.
스레드는 while문 안에서 무한 루프 중이고
m_bRun에 true/false를 넣어 스레드를 작동/중지 시킬 수 있도록 구성한다.
m_bStop에 true를 넣음으로 return 명령을 통해 스레드를 종료시킨다.
끝
'Programming > MFC(C++)' 카테고리의 다른 글
[MFC] 스레드 생성시 구조체 인자 넣기 (0) | 2018.12.07 |
---|---|
[MFC] 레지스트리(Registry) 활용하여 값 저장/불러오기 (0) | 2018.11.29 |
[MFC] 다이얼로그 크기 조절 시 컨트롤 사이즈 자동 조절하기(EasySize) (0) | 2018.10.30 |
[MFC] 운영체제(OS) Bit 확인하기 (0) | 2018.10.26 |
[MFC] CreateProcess와 CreatePipe를 이용하여 ping command 실행 하고 결과 읽기 (0) | 2018.10.26 |
- Total
- Today
- Yesterday
- SendMessage
- MFC
- c++
- sqlite3
- 부가가치세전산매체
- 부가가치세
- 전자신고파일설명서
- 전자신고변환
- 청년내일채움공제 만기신청
- MFC ADO
- ADO
- MFC Modeless
- MSSQL
- 법정동코드
- 세금계산서합계표양식
- 청년내일채움공제
- ADODB
- 해외송금확인
- 스쿠트항공 환불받기
- 모달리스
- 스티커메모로드중
- MXCOMPONENT
- 프로세스이름변경
- Sticky Notes Loading
- 항공알파벳
- 소켓
- Modeless
- CMFCBUTTON
- 모달리스 다이얼로그
- #자동업데이트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |