求助关于理解服务进程的退出与主线程的退出
一般的服务的程序入口函数是main,
在main中做的事情非常简单,就是安装,注册服务进程的ServiceMain,代码如下:
void main( )
{
// 设置SERVICE_TABLE_ENTRY 数据结构,以NULL 结构结束,
// 作为StartServiceCtrlDispatcher 函数的参数。
SERVICE_TABLE_ENTRY DispatchTable[] =
{
{ "Sample_Srv", (LPSERVICE_MAIN_FUNCTION) SplSrvServiceStart },
{ NULL, NULL }
};
if (!StartServiceCtrlDispatcher( DispatchTable))
{
SvcDebugOut(" [SPLSRV_SERVICE] StartServiceCtrlDispatcher (%d)\n",
GetLastError());
}
}
我第一眼看到这个流程的时候有些奇怪,调用StartServiceCtrlDispatcher后,函数返回的话,主线程不就要退出了(那也意味着这个进程都要退出了),服务主函数是靠新线程调用。 实际调试的时候发现, 当调用完StartServiceCtrlDispatcher后, main函数仿佛在等待一个看不见的事件对象, 只有当给该服务发送stop请求后,main函数才退出。实际的流程是这样的 吗? 还有求ide调试服务进程的方便办法,我的是加了一个15秒的定时器。然后看手快,用vc的调试附加进程。