读书人

后台服务开启长时间运行都无有关问

发布时间: 2012-01-14 20:02:35 作者: rapoo

后台服务,开启,长时间运行都无问题,退出的时候偶尔出错
后台服务程序,service 方式
开启服务,没有任何问题
长时间运行也没有问题
退出的时候,偶尔会发生问题,注意是偶尔
使用日志监控,发现主服务线程成功结束,然后释放内存等也全部成功结束
最后返回MAIN函数,日志记录到也是成功结束
可以偶尔会发生错误,发生错误时日志也可以看到所有的结束动作都是成功的
也就是已经到了MAIN( )函数的RETURN部分了
接下去是一些类的自我释放,这个无法监控到了
但是同样的类,用在另外一个程序中,无任何问题,测试中也没有问题
怪了
怪还怪在服务结束后大约3-5秒,系统才弹出错误提示框,
内容类似
Server=watson.microsoft.com
UI LCID=2052
Flags=1674066
Brand=WINDOWS
TitleName=XXXXXXX.exe
DigPidRegPath=HKLM\Software\Microsoft\Windows NT\CurrentVersion\DigitalProductId
ErrorText=如果您正执行到一半,您的未保存的信息可能会丢失。

我的监控日志可以记录到已经执行到MAIN( )返回了
2007 04-12 12:49:53 A and U thread exit ok
2007 04-12 12:49:53 Free user data ok
2007 04-12 12:49:53 Free thread memory ok
2007 04-12 12:49:53 End Memory Pool ok
2007 04-12 12:49:53 Flush memory log ok
2007 04-12 12:49:53 My service of xxxxxxx exit ok! *
2007 04-12 12:49:53 --------Stop myservice successfully done--------
2007 04-12 12:49:53 Service main: success waiting for thread end , now to close handle
2007 04-12 12:49:53 Server stop: Now to End Tcp
2007 04-12 12:49:56 Server stop: Now to Call CoUninitialize
2007 04-12 12:49:56 ----XXXXXXXX service now exit successfully----

注意,这个错误不是每次都发生,是偶尔发生


[解决办法]
没办法帮忙
但是提点建议
这种问题要想分析出原因的最好办法就是能稳定的让它出现,如果能想办法让它每次都出现,就成功了一半
另外就是总结出现的规律
[解决办法]
发生的错误是什么?
[解决办法]
内存泄露
[解决办法]
我调试WinService程序的时候,所有线程都加try和Catch,一旦发生错误,全部记录日志
而且new和delete全部重载,delete的时候发现提早销毁也全部记录日志
所有的互斥都自己包装一个类, 对已经销毁的对象操作的时候也记录日志......

当然,以上都是在#define中有定义一个_DEBUG_SERVICE, 取消掉这个定义就和普通代码一样了

希望对你有帮助

读书人网 >VC/MFC

热点推荐