使用C 异常来取代exit()函数[2]

2008-02-23 05:39:37来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  在原始代码中缺少恢复或日志记录的功能,假如发生了一个错误,程式就会"消失"不见了,让用户手足无措。下面是重新组织后的代码,注意,没有修改函数修饰符:

void main() {
 //初始化
 ...
 try {
  ProcessMail(...);
 } catch (int ret) {
  switch (ret) {
   case E_INITIALIZATION_FAILURE: ...
   case E_IRRECOVERABLE: ...
   ...
  }
 }
}

void ProcessMail(...) {
 //初始化
 ...
 if ( initializationError ) {
  throw(E_INITIALIZATION_FAILURE);
 }

 while ( !shutdown ) {
  try {
   ReadMail(...)
  } catch (int ret) {
   switch (ret) {
    case E_READ_ERROR:
     //记录错误信息
     ...
     //试图恢复
     ...
     if ( recovered ) {
      continue;
     } else {
      throw(E_IRRECOVERABLE);
     }
     break;
    case ...
   }
  }
  //继续处理
  ...
 }

 //throw()能够用来取代缺少的返回码
 //但也要注意由此带来的性能损失

 throw(S_OK);
} // ProcessMail()

void ReadMail(...)
{
 ...
 //在此无须捕获异常
 nBytesAvailable = ReadBytes(...)
 ...
}

int ReadBytes(...)
{
 //读取数据
 if ( error ) {
  throw(E_READ_ERROR);
 }
 return nBytesRead;
}

  现在,修改以前遗留的老式项目时,是不是多点信心了呢?

[1] [2]




标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Ethereal使用入门

下一篇: VC实现系统热键激活后台服务程式[2]

热门词条
热门标签