Linux 下 C++ 异常处理技巧(二)
2011-04-28 12:44:42
·
作者:
·
浏览: 2044
requests
// pthread_exit();
}
};
public:
ExceptionHandler()
{
static SingleTonHandler s_objHandler;
}
};
//////////////////////////////////////////////////////////////////////////
class A
{
public:
A()
{
//int i = 0, j = 1/i;
*(int *)0 = 0;
}
};
// Before defining any global variable, we define a dummy instance
// of ExceptionHandler object to make sure that
// ExceptionHandler::SingleTonHandler::SingleTonHandler() is invoked
ExceptionHandler g_objExceptionHandler;
A g_a;
//////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
return 0;
}
处理多线程程序中的异常
有时一些异常没有被捕获,这将造成进程异常中止。不过很多时候,进程包含多个线程,其中少数线程执行核心应用程序逻辑,同时,其余线程为外部请求提供服务。如果服务线程因编程(www.cppentry.com)错误而没有处理某个异常,则会造成整个应用程序崩溃。这一点可能是不受人们欢迎的,因为它会通过向应用程序传送不合法的请求而助长拒绝服务攻击。为了避免这一点,未捕获处理程序可以决定是请求异常中止调用,还是请求线程退出调用。清单 3 中 ExceptionHandler::SingleTonHandler::Handler()
函数的末尾处展示了该处理程序。
结束语
我简单地讨论了少许 C++(www.cppentry.com) 编程(www.cppentry.com)设计模式,以便更好地执行以下任务:
- 在抛出异常的时候追踪异常的来源。
- 将信号从内核程序转换成 C++(www.cppentry.com) 异常。
- 捕获构造和/或析构全局变量期间抛出的异常。
- 多线程进程中的异常处理。
我希望您能采用这些技巧中的一些来开发无忧代码。