假设我有一个在某些机器上运行 24x7 的库。即使代码坚如磐石,硬件故障也迟早会触发异常。我想为这样的事件设置某种故障保护装置。一种方法是编写封装每个 api a 的包装函数:
returnCode=DEFAULT;
try
{
returnCode=libraryAPI1();
}
catch(...)
{
returnCode=BAD;
}
return returnCode;
然后库的调用者重新启动整个线程,如果 returnCode 错误则重新初始化模块。
事情可能会大错特错。例如
如果 try 块(或 libraryAPI1())有:
func1();
char *x=malloc(1000);
func2();
如果 func2() 抛出异常,x 将永远不会被释放。同样,文件损坏也是一种可能的结果。
你能告诉我在这种情况下还有什么其他可能出错的地方吗?