《Microsoft Windows 2000 服务器端编程》 -- 第一章:容错性和精简代码

[翻译:马夫]

[上一页] [下一页]

1.1.1 容错性和精简代码

  
 
    现在的软件是如此复杂,想要预料到每一个执行环境是不可能的。我所说的“环境”指的是进程地址空间里的所有内容,函数的参数值,以及运行在同一系统下的其他进程的影响。由于这些复杂性,服务程序要持续不断地运行几个月就必须具备容错性。
    我们中绝大多数人都听从那些大学教授,他们在“如何执行恰当的错误检查”和“从函数内部恢复错误”这两点上坚定地表明了自己的观点。我们程序员也知道应该写容错代码,但往往觉得那些对细节必需的考虑是冗长乏味的,以至于忽略了要这样做。一想到操作系统“应该能关照我们”,我们就变得有些得意自满了。很多程序员居然认为内存是无限的,资源泄漏也是可以的,因为他们了解到在进程终结时,操作系统会自动清除所有(曾被进程占用)的资源。
    的确有很多应用程序也是以这种方式实现,而结果不是破坏性的,因为这些应用程序倾向于运行一段较短的时间后又重新开始。然而,服务器程序要永远运行,省略掉恰当的错误恢复和资源回收代码将是灾难性的!
    依我看来,编写一个能够每天24小时每周7天稳定运行的程序的唯一方法,是使用异常处理(exception handling)。因此,我极力建议你熟悉异常处理技术。异常处理有两种类型:结构化异常处理——由Windows操作系统提供的一种(错误检测、恢复)机制;以及C++异常处理——由编译器提供的一种机制。这两种机制都允许你编写能够从不曾预料到的故障和硬件错误(如:非法访问,除数为零,堆栈溢出等)中恢复的代码。
    这两种异常处理机制在各种不同的情景下都是有用的,而幸运的是Microsoft Visual C++允许我们在同一个程序中交替地使用它们。本书中的示例程序揭示了创建强健服务程序步骤中所蕴涵的编程观念,这些程序中的绝大多数都使用了异常处理库。如你要进一步了解异常处理,请参看《Programming Applications for Microsoft Windows, Fourth Edition》(Jeffrey Richter, Microsoft Press, 1999)。
    恰当地在服务程序中使用C++,会使你的编程生活相当轻松。我发现把简单的Windows对象封装于C++类中是有用的,理由如下所述。本书中很多示例程序使用了C++的类,也正是因为这些理由。
    ■  在C++类的析构函数中放置关闭(Windows)对象的代码,编译器就能确保(曾被打开使用的Windows)对象被释放。
    ■  将Windows API函数封装在C++类的方法中,可迫使你以正确的方式调用Windows API函数。
    ■  通过C++类调用Windows API函数,允许你把正确性检查和验证断言都集中在一个地方,这可使你在代码中相当容易地查找错误。
    ■  C++类减少了你编写的代码总量,使你的代码有更高的可读性和可维护性。
    ■  使用C++类你就能复用代码。如果你用C++模板类,你还能创建通用的、类型匹配安全的解决方案。 
 
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值