티스토리 뷰

Visual Studio 2012 사용


스레드(Thread)를 실행하기 전에 스레드에 전달하는 인자를 구조체를 활용하여 여러개의 변수로 만들어보자.

기존에 스레드 만드는 법은 아래를 참조.

http://zadd.tistory.com/43


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.구조체변수 로 입력하여 값을 불러와서 활용한다.


댓글