Chinaunix首页 | 论坛 | 博客
  • 博客访问: 368110
  • 博文数量: 715
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:46
文章分类

全部博文(715)

文章存档

2011年(1)

2008年(714)

我的朋友

分类:

2008-10-13 16:30:56

除虫记之九(糊涂的时间和MFC 1小时/1人)

累啊,连续的加班捉虫,搞的我疲惫不堪,天啊。

刚才我的机器碰到了一个前所未闻的故障,我上午从内部网软件服务器上装了一个金山词霸2003,然后又做了xp更新,结果重启后机器就用不起来了,鼠标点哪儿都报告explorer程序错误,天哪,什么乱七八糟的。重启n次都是这个,下午在安全模式里面把所有的更新都卸载了,还是不行,在安全模式重现更新,还是不行,搞了一天,不过在下午发现了一个转机,就是不用鼠标用键盘就没有这个问题了,用触摸屏的鼠标也不行,吃晚饭的时候,和另一个部门经理谈了这个事后,他搞了一会,把金山词霸退出,结果好了,气死我了,竟然是这个问题。

闲话少说,回到捉虫上来。

公测中有个别机器运行了一晚上后内存用到了几百M,这还了得,立刻开会讨论,决定发版推迟,解决内存泄漏问题。

分工,各自去查。

单表一枝:一个开发人员在追查的过程中,有个疑问,他用一个管理类管理一些new出来的对象,每个对象都有一个时间表示自己的生存期,他在管理类中启动一个定时器轮训检测每个对象是否过了生存期,如果过了生存期,就把对象释放掉,但他通过_CrtDumpMemoryLeaks方法发现好像是有一些对象应该过了生存期,但好像没有删除掉。

让我过去审核流程,我审核后发现流程没有什么问题,他把对象放到一个CMap表里面,定时器里面轮循检查,没有发现什么问题。

于是怀疑是不是数据计算上出了问题?

他的代码中用的是两个一个CTime结合GetCurrentTime记录每个对象的出生时间,用一个long整数表示生存期,检查的时候用CTimeSpan来判断,我没有用过CTimeSpan,对这个没有把握,建议换成time_t或者GetTickCount来计时,开发人员遵循了我意见,换成了GetTickCount,做了相关处理,运行后,高兴的向我报告,问题没有了,通过调试报告的日志可以看出该放的都放了,然后告诉了我可能的原因是两个CTime的差可能减出了负数导致判断错误,我没有对这个结论做进一步的调研。只是告诉他我没有用过CTimeSpan。

问题就这样解决了,我说不上原因,只能怀疑MFC封装中出了问题。

教训:如果有简单的win32API可用,不要用MFC。


--------------------next---------------------

阅读(115) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~