티스토리 뷰
UINT ThreadFunc_WAIT(LPVOID pParam);
class CBookingDlg : public CDialog
{
.
.
.
private:
CWinThread* m_pThread;
};
void CBookingDlg::OnBnClickedButtonBuy()
{
.
.
.
// 쓰레드 처리
m_pThread = AfxBeginThread(ThreadFunc_WAIT, this); // 쓰레드로 처리할 함수명와 전달 인수(Dlg를 변수)
}
UINT ThreadFunc_WAIT(LPVOID pParam) // 스레드 함수는 반드시 '외부함수'로 선언해야 한다.
{
CBookingDlg *pDlg = (CBookingDlg*)pParam;
.
.
.
return 0; // 스레드 자동 소멸 됨.
}
void CBookingDlg::OnBnClickedButtonStop()
{
DWORD dwExitCode;
::GetExitCodeThread(m_pThread->m_hThread, &dwExitCode);
if(AfxMessageBox("스레드를 중지하겠습니까?", MB_YESNO) == IDYES)
{
if(dwExitCode == STILL_ACTIVE) // 스레드가 실행 중인지 검사
::TerminateThread(m_pThread->m_hThread, 0); // 스레드 강제 종료 시 종료코드는 0으로 하는듯.
// AfxEndThread(0)는 쓰레드 내에서만 호출된다고 함.
.
.
}
}