Stopping my ATL service failed
Hi,
I've created a ATL service in VC++ (unmanaged code) on Visual Studio 2005.
Everything works fine.
But I still have a problem to stop my service.
During its termination, my service needs time to communicate with external
components (about 5 minutes).
When I stop my service from the "Control manager", my service enters in a
STOP_PENDING state. I start a independant thread which refresh its status by
calling regularly SetServiceStatus.
But the "Control Manager" generates a 1053 error after a timeout of about 2
minutes.
After several days of work, I can't find the reason, so need help.
For information, there is my code:
void CMyServiceModule::OnStop()
{
this->LogEvent(_T("SERVICE_STOP_PENDING"));
m_status.dwWaitHint = 10000;
m_status.dwCheckPoint = 1;
SetServiceStatus(SERVICE_STOP_PENDING);
_beginthread( StopFunct, 0, (void *) this );
// PostThreadMessage(m_dwThreadID, WM_QUIT, 0, 0);
}
void StopFunct( void *ch )
{
CMyServiceModule *pThis= (CMyServiceModule *)ch;
DWORD dwStart = GetTickCount();
dwStart += 300000;
while (dwStart>GetTickCount()) {
pThis->m_status.dwWaitHint += 10000;
pThis->m_status.dwCheckPoint++;
pThis->SetServiceStatus(SERVICE_STOP_PENDING);
Sleep(3000);
}
PostThreadMessage(pThis->m_dwThreadID, WM_QUIT, 0, 0);
}
I used the SetServiceStatus which came from the parent class
(CAtlServiceModuleT):
void CAtlServiceModuleT::SetServiceStatus(DWORD dwState) throw()
{
m_status.dwCurrentState = dwState;
::SetServiceStatus(m_hServiceStatus, &m_status);
}
Thanks in advance....
--
Fred