Win2k Pro与Server的区别
最近编程越到一个怪事,同一个程序运行在windows2000 server级的操作系统上一点问题没有,而运行在window 2000 professional上就会出现异常.而且一旦出现异常,就会使cpu的占有率高达100%,程序跟踪结果结论为:堆栈溢出(stack overflow).windows 2000系列的OS不是一个NT内核吗,可是书中许多资料都没严格在windows 2000系列产品中区分版式本,而一般只是和98或者XP区分.由于程序中大大小小开了四个线程,加上主线程一共五个,访问串口需要一定的线程同步,一开始我以为是我处理线程对象同步上有失误,但是检查一下代码,没问题呀,找不出什么原因.结果又测试了一翻,结果功夫不负有心人,我发现出现错误是由于鼠标点击菜单引起的,这使我想到原来我使用的一个类CBitmapMenu这个类是我从书中的实例中摘录的,后来觉得这个类很好,就拿来用了.会不会是这个类的问题,我马上修改代码一试….果然不错,就是CBitmapMenu的问题,CBitmap是一个菜单自画类(owner Draw)可以自动读取工具栏图标从而更新菜单项左边的的小图标.
由以上事件得出以下结论:
1 CBitmapMenu类存在问题(也可能是使用不当,但是为什么windows 2K server/xp下正常呢?);在使用别人或者自己写的类时,一定要在各个操作系统版本上进行严格的测试.为了测试方便,建议开发时使用客户用得最多的操作系统比如98/windows 2000 pro/xp,一般用户不会用server级的操作系统.
2.尽管出现此问题可能是一个编程错误,但是我还是下一个结论:windows 2000 各个版本出于性能的考虑,程式默认的参数一定会有一些不同,比如说线程堆栈(这一点我现在还没证实).
3.为了让程序有较大的兼容性,建议不要使用有版本限制的函数库或者类库(比如换肤库),另外,程序运行的稳定性永远是第一位的,漂亮的界面才是其次,因此,一定要在保证前者的基础上,才能谈其他的.
4.开发人员不要随意加入自己觉得有特色(一般是有点小技巧的)的功能,除非用户明确要求,否则要让软件的操作方法,运行过程特征等与通用软件保持一致(如Office系列),不然有可能开发出用户根本不想要的功能,结果,出力不讨好,又劳民伤财.
5.程序设计出来后,多多少少会有很多多毛病,开发人员最好和测试人员配合好,并且开发人员最好在自己测不出毛病时,再让测试人员测试.并且最好要好好沟通,这样才能使软件逐步完善起来.