본문 바로가기

C/C++

[MFC] My Thread

MFC에서 쓰레드 만들때

copy & paste 용도

 


 My Thread

BOOL CUTMModuleDlg::ServiceStart()

{ 

// server thread
 m_ServerThreadKill.ResetEvent();
 m_ServerThreadEnd.ResetEvent();

 CWinThread* pServerThread = NULL;
 pServerThread = AfxBeginThread(ServerProc, (LPVOID)this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
 if (pServerThread == NULL)
 {
  return FALSE;
 }
 else
 {
  pServerThread->ResumeThread();
 }

 return TRUE;
}

void CUTMModuleDlg::OnBnClickedServiceStop()
{
 // TODO: Add your control notification handler code here

 ServiceStop();
}

BOOL CUTMModuleDlg::ServiceStop(void)
{
 if (m_bIsServerThread)
 {
  m_ServerThreadKill.SetEvent();
  while (WaitForSingleObject(m_ServerThreadEnd, 500))
  {
   ;
  }
  TRACE("Server Thread Stop\n");
 }
 m_bIsServerThread = FALSE;

 return TRUE;

}

UINT CUTMModuleDlg::ServerProc(LPVOID lParam)
{
 CUTMModuleDlg* pThis = (CUTMModuleDlg*)lParam;


 while(TRUE)
 {
  if (::WaitForSingleObject(pThis->m_ServerThreadKill, 0) == WAIT_OBJECT_0)
  {
   TRACE(_T("Server Thread is Exit\n"));
   pThis->m_bIsServerThread = FALSE;
   pThis->m_ServerThreadEnd.SetEvent();
   return 1;
  }

  TRACE(" loop \n");
  Sleep(1000);
 }

 return TRUE;
}