讨论一下:如何在windows平台上写出稳定的(服务)程序

vcbear 2004-12-13 03:41:12
在很多情况下我们需要在windows平台上编写长时间高负载运行的程序,比如网络服务器一类的.
但经常发现程序运行一段时间后(几天或数月),会出一些莫名其妙的错误,表现常常是"非法操作,程序被关闭"一类的.很难跟踪。
希望大家讨论和分享一些编写高稳定应用程序的经验.

个人抛砖引玉,说点比较一般的体会,像使用指针前要判断这种就先不说了。

1:尽量减少GDI操作,没有最好.尤其是用MFC的时候.
2:在用vc6.0的时候,尽量少用其STL的map/list/vector等容器,这些容器的实现在vc6.0中的版本稳定性据说比较一般
3:如果可以的话,绝不调用malloc/free或new delete,采用预先分配的缓冲.
4:尽可能用try/catch包围代码.
5:IO操作最好加锁,尤其是写磁盘文件,最好加全局锁
6:对任何有可能增长的资源(如连接数,外来数据)计算其容量,并设定上限。
7:有前辈指点过可以调用一些系统的debug函数,来接管程序的一些致命异常,一时想不起来是哪些函数了,请赐教.
8: 编写进程监控程序(但监控程序本身的稳定性也难说,所以这不是根本办法)

近两年写windows程序少了,在unix/linux上写的程序相对多一些,对windows平台的编程生疏了不少,以上所列可能有争议,或者浅薄和片面,请多指教.
...全文
133 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
asker100 2005-04-13
  • 打赏
  • 举报
回复
mark
vcbear 2004-12-15
  • 打赏
  • 举报
回复
如果没有成熟,经过测试的库呢?如果能够开源,大家一起改就好了.但是不是所有程序都能公开,公开了也不一定吸引人,有人要了也只是索取不回报....

zhuyie 2004-12-14
  • 打赏
  • 举报
回复
我的体会是:
1. 这类程序尽量写成服务,完全没有界面比较安全。
2. 尽量多使用成熟的、经过测试的库,而不要什么都自己写,再强的人也会写出bug的。
3. 楼主补充的那条非常赞成,虽然Win32 API接口是兼容的,但不同平台下某些函数的差异还是很大的。
Ner0_3 2004-12-14
  • 打赏
  • 举报
回复
学习
vcbear 2004-12-13
  • 打赏
  • 举报
回复
谢谢一楼补充.
另外补充一点:感觉windowsXP和win2000/2003上的程序是100%兼容,最好在什么平台上跑程序,就在什么平台上进行编译.
tyzyx 2004-12-13
  • 打赏
  • 举报
回复
学习
bobob 2004-12-13
  • 打赏
  • 举报
回复
我补充:)
1。做好的程序一定要在很low的机器上多测试几次
2。对于指针判断也要说说,不要用if(ptr!=NULL)这种方式去判断一个指针是否有效,而改用IsBadWritePtr()来判断。
3。对于一些对操作系统敏感的api一定要分情况处理,比如CreateCompatiableBitmap等等。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧