MFC에서 스레드 선언 및 사용 법
- C++/MFC
- 2018. 5. 17. 10:01
MFC Thread의 간단한 구현 및 사용 예제
스레드란?
스레드(Thread) : 하나의 프로그램 내에서 여러 개의 실행 흐름을 두기 위한 모델을 말합니다.
그러면 실제 MFC에서 스레드를 어떻게 구현하는지 알아보도록 하겠습니다.
아래의 예제는 MFC 대화상자 프로그램 하나를 생성하여 ThreadStart, ThreadPause, ThreadStop 세 개의 버튼을 생성하여 MFC 에서 어떻게 스레드를 선언하고 사용하는지 보여드리도록 하겠습니다.
1. 먼저 MFC 대화상자 기반의 프로젝트 하나를 선언하여 주십시오. 그리고 아래 그림과 같이 Button 세 개를 각각 배치하여 주십시오
그리고 나서 MainDlg.h 파일에 아래와 같이 변수를 선언하여 주십시오.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//스레드 Working Type Enum으로 선언 enum ThreadWorking { STOP = 0, RUNNING = 1, PAUSE = 2 };
//1. 변수 선언 bool m_bThreadStart; CWinThread *m_pThread; ThreadWorking m_ThreadWorkType;
//2. 스레드 동작시킬 함수를 생성 static UINT ThreadFunctionFirstTest(LPVOID _mothod); |
이렇게 코드를 헤더파일에 작성을 완료하셨다면 다음은 MainDlg.cpp 에서 아래와 같은 함수를 선언하여 주십시오.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
UINT CMFCThreadTestDlg::ThreadFunctionFirstTest(LPVOID _mothod) { CMFCThreadTestDlg* pDlg = (CMFCThreadTestDlg*)AfxGetApp()->m_pMainWnd;
int num = 0;
while(m_ThreadWorkType == RUNNING) { AfxMessageBox(_T("ThreadRunning!!!")); Sleep(1000); } return 0; } |
그리고 앞에서 생성하였던 세 개의 버튼의 클릭 이벤트를 선언하여 아래와 같이 코드 작성을 시켜줍니다.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
void CMFCThreadTestDlg::OnBnClickedButtonStart() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. if(m_pThread == NULL) { m_pThread = AfxBeginThread(ThreadFunctionFirstTest, this);
if(m_pThread == NULL) { AfxMessageBox(_T("Error!!!")); } //m_bAutoDelete를 선언해준것은 스레드 객체를 자동삭제 방지를 하겠다는 의미입니다. 즉, 사용자가 직접 delete 하겠다는 것. m_pThread->m_bAutoDelete = FALSE; m_ThreadWorkType = RUNNING; } else {
if(m_ThreadWorkType == PAUSE) { //스레드 재 시작하겠다는 함수 m_pThread->ResumeThread(); m_ThreadWorkType = RUNNING; } } }
void CMFCThreadTestDlg::OnBnClickedButtonPause() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. if(m_pThread == NULL) { AfxMessageBox(_T("Thread Not Start!!!!")); } else { m_pThread->SuspendThread(); //스레드 일시정지 함수 m_ThreadWorkType = PAUSE; } }
void CMFCThreadTestDlg::OnBnClickedButtonStop() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. if(m_pThread == NULL) { AfxMessageBox(_T("Thread Not Start!!!!")); } else { m_pThread->SuspendThread();
DWORD dwResult; ::GetExitCodeThread(m_pThread->m_hThread, &dwResult);
delete m_pThread; m_pThread = NULL;
m_ThreadWorkType = STOP;
AfxMessageBox(_T("Thread Stop!!")); } }
|
이렇게 구현을 해주시고 프로젝트를 실행하여 테스트를 해보시면 스레드가 1초마다 작동 되는것을 메시지 박스로 확인 하실 수 있고, PAUSE 버튼을 클릭 시 스레드가 정지하고, STOP 버튼을 클릭시 해제가 되는 것을 확인 하실 수 있습니다.
이로써, MFC에서 스레드 선언 및 사용 방법에 대하여 알아보았습니다.
감사합니다.^^
'C++ > MFC' 카테고리의 다른 글
C++ MFC 환경에서 공백문자 제거하는 방법 (0) | 2018.05.30 |
---|---|
MFC 환경에서 Log 파일 생성 및 Log 기록 남기기 (0) | 2018.05.17 |
MFC 텍스트 관련함수 응용 (0) | 2018.05.14 |
MFC 사용자 정의 메시지 사용법 (0) | 2018.05.11 |
CDC클래스를 이용하여 출력하기 (0) | 2018.05.10 |
이 글을 공유하기