[C++]/MFC 프로그래밍 기초
3. CWinThread와 AfxBeginThread
JuJu(INTJ)
2024. 4. 17. 15:09
Thread를 사용하는 이유
- 동시성: 스레드를 사용하면 여러 작업을 동시에 실행할 수 있다. 이는 프로그램의 성능을 향상시키고 여러 작업을 병렬로 처리할 수 있도록 한다. 이는 멀티코어 프로세서에서 시스템 자원을 효율적으로 사용할 수 있게 한다.
- 응답성 향상: 긴 작업을 수행하는 동안 UI가 응답하지 않는 문제를 해결하기 위해 스레드를 사용할 수 있다. 예를 들어, UI 스레드에서는 사용자 입력을 처리하고, 백그라운드 스레드에서는 긴 작업을 처리하여 UI의 응답성을 유지할 수 있다.
- 백그라운드 작업 처리: 스레드를 사용하여 백그라운드에서 작업을 처리할 수 있다. 이는 네트워크 통신, 파일 I/O, 데이터베이스 쿼리 등과 같은 작업을 백그라운드에서 비동기적으로 수행할 때 유용하다.
CWinThread와 AfxBeginThread
MFC에서 쓰레드를 생성하는 함수는 두 가지가 있다.
CWinThread::CreateThread()와 AfxBeginThread()이다.
CWinThread 및 AfxBeginThread는 MFC에서 멀티스레드 프로그래밍을 지원하는 클래스와 함수다.
1. CWinThread:
- CWinThread 클래스는 Windows에서 스레드를 나타내는 MFC 클래스다.
- 스레드의 생성, 실행, 종료 등 스레드 관리 기능을 제공한다.
- 주로 CWinApp 클래스와 함께 사용되어 애플리케이션의 기본 스레드를 나타낸다.
- CWinThread 클래스를 상속하여 사용자 지정 스레드 클래스를 만들 수 있다. 이를 통해 사용자가 스레드 동작을 정의하고 관리할 수 있다.
- 개발자가 스레드의 동작을 더 직접적으로 제어하고자 할 때 주로 사용된다.
class MyThread : public CWinThread {
public:
virtual BOOL InitInstance() {
// 스레드 초기화
return TRUE;
}
virtual int Run() {
// 스레드 실행
return 0;
}
};
int main() {
MyThread thread;
thread.CreateThread(); // 스레드 생성
thread.WaitForSingleObject(); // 스레드 종료 대기
return 0;
}
2. AfxBeginThread:
- AfxBeginThread 함수는 새로운 스레드를 시작하는 데 사용된다.
- 스레드의 진입점(스레드에서 실행할 함수 또는 메서드) 및 추가 매개변수를 지정하여 스레드를 시작한다.
- CWinThread의 파생 클래스를 만드는 번거로운 과정 없이 쉽게 새로운 스레드를 생성할 수 있다.
//스레드에서 사용할 제어 함수
UINT MyThreadFunction(LPVOID pParam) {
// 스레드 실행 작업
return 0;
}
int main() {
CWinThread* pThread = AfxBeginThread(MyThreadFunction, NULL); //스레드 생성
if (pThread != NULL) {
pThread->Join(); // 스레드 종료 대기
delete pThread; // 스레드 객체 삭제
}
return 0;
}
반응형