作者:俺想有栋房
上图是ATL模板CAtlServiceModuleT内部运行服务的一个过程,其中RunMessageLoop是一个消息循环(Message Loop),直到SCM(服务控制管理器)发送了一个WM_QUIT消息,PostThreadMessage(m_dwThreadID, WM_QUIT, 0, 0),消息循环结束,然后执行PostMessageLoop,所以你可以在这里进行一些清理工作。
利用ATL创建NT服务非常容易,你直接参考ATL模板CAtlServiceModuleT源码,简单清晰。关于NT服务的细节,网上有很多资料可以参考,也可以参考MSDN的相关部分。