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; } |