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) 异常。
  • 捕获构造和/或析构全局变量期间抛出的异常。
  • 多线程进程中的异常处理。

 

我希望您能采用这些技巧中的一些来开发无忧代码。