Programming/MFC(C++)
[MFC] 스레드 생성시 구조체 인자 넣기
Zadd
2018. 12. 7. 13:40
Visual Studio 2012 사용
스레드(Thread)를 실행하기 전에 스레드에 전달하는 인자를 구조체를 활용하여 여러개의 변수로 만들어보자.
기존에 스레드 만드는 법은 아래를 참조.
1. 구조체 선언
Header.h
struct STPARAM { CTestDlg *m_pDlg; int i; char ch; CString str; STPARAM(CTestDlg *pDlg, int num, char chTmp, CString strTmp) :m_pDlg(pDlg), i(num), ch(chTmp), str(strTmp){} }; //...
STPARAM이란 구조체를 정의하고 그 안에 필요한 데이터들을 넣는다.
STPARAM(......){} 구문은 처음 생성시 Setter로 값을 바로 지정할 수 있게 해준다.
2. 스레드에 구조체 입력
CTestDlg.cpp
void CTestDlg::OnBnClickedBtnThread() { m_Thread = AfxBeginThread(RunThread, new STPARAM(this, 1, 'H', "Test")); }
버튼 컨트롤을 하나 만들어 클릭시 스레드가 실행되게 하였다.
스레드 함수의 파라미터 중 LPVOID pParam을 넣는 란에 다음과 같이 구조체를 선언하여 입력한다.
3. 스레드 함수에서의 처리
CTestDlg.cpp
UINT CTestDlg::RunThread(LPVOID pParam) { STPARAM Param = *(STPARAM*)pParam; int i = Param.i; char ch = Param.ch; } //...
STPARAM이란 구조체를 만들고 *(STPARAM*)pParam을 통해 값을 전달받는다.
그 이후에는 Param.구조체변수 로 입력하여 값을 불러와서 활용한다.
끝