您的位置:程序门 -> vc/mfc -> 进程/线程/dll



关于服务程序启动的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


关于服务程序启动的问题[已结贴,结贴人:funabori]
发表于:2008-01-22 10:02:27 楼主
我做了一个服务程序,程序做完初始化以后,用setservicestatus函数把
服务设置成了running状态,然后监听service_control_sessionchange
事件,我发现我在service_control_sessionchange的处理代码居然影响
以后的服务程序的启动,后面的服务程序都得等我的处理代码执行完了以后
才能启动,这是怎么回事啊,windows按照顺序一个一个启动服务的时候是怎么
判断是否一个服务已经启动,可以启动下一个服务了那,原来以为把服务状态
设置上就可以,看来不是这样啊,有经验的朋友帮忙看看吧,谢了。
发表于:2008-01-22 10:19:191楼 得分:20
因为service_control_sessionchange是顺序执行的,这个才影响其它的服务,所以不要在这个通知响应里面执行耗时工作
发表于:2008-01-22 10:33:452楼 得分:0
谢谢回复,能否说细致一些,或者有什么ms的解说这个原理的资料url没有。
别的服务程序如果也是先设置启动状态,然后开始监听事件的话,为什么会
影响别的程序启动那。
发表于:2008-01-22 11:05:063楼 得分:0
当session发生改变的时候,系统会把这个事件通知所有的服务程序和登记了此通知的顶级窗口,这个通知过程是顺序执行的,一个进程处理完毕才通知下一个,服务程序不应该执行耗时工作,你可以保存一个状态,或者将事件交给另一个线程来处理。

每个服务程序启动初始化时都要设置回调函数,这个设置过程会在系统内部注册自己来接收通知,但当通知正在发生(就像你的这种情况)的时候,内部已经锁定了,其它服务的注册过程会阻塞,必须等你处理完成解锁之后才能继续运行。其实这些注册过程都是通过rpc/lpc来调用内核对象完成的,所有内核对象都会上锁。
发表于:2008-01-22 11:06:324楼 得分:0
很详细,谢谢了


快速检索

最新资讯
热门点击