Re: Stopping my ATL service failed
 
Any reason you are upping your estimate by 10 seconds every
3 seconds? After two minutes your estimate is whopping 390
seconds = 6.5 minutes...
-- 
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnickolov@mvps.org
MVP VC FAQ: http://www.mvps.org/vcfaq
=====================================
"Fred" <Fred@discussions.microsoft.com> wrote in message 
news:C5B5EDC3-990C-4339-B34A-9ECD44EB956F@microsoft.com...
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