首页 > 解决方案 > 如何根据异常类防止终止处理程序中止

问题描述

我通过调用设置了新的终止处理函数:

std::set_terminate(TerminateHandler);

终止处理程序如下所示:

void TerminateHandler()
{
    std::exception_ptr exptr = std::current_exception();
    bool abort = true;
    if(exptr != nullptr)
    {
        try
        {
            std::rethrow_exception(exptr);
        }
        catch(SoftMyException& ex){
            std::cout << "Soft my exception";
            abort = false;
        }
        catch(std::exception& ex)
        {
            std::cout << "Standard exception";
        }
        catch(...)
        {
            std::cout << "Terminated due to unknown exception";
        }
    }
    else
    {
        std::cout << "Terminated due to unknown reason";
    }

    if(abort)
    {
        std::abort();
    }
    else{
        std::cout << "Not abort";
    }
}

这些自定义异常设置在共享库和主程序中。我想在 SoftException 到来时继续工作。SoftMyException 类的定义如下:

class SoftMyException : public std::exception{};

我的程序运行良好,但仍然没有调用中止事件 abort。

这里是否有任何选项可以调用某些函数以重新启动终止处理程序中的状态并继续工作而不中止取决于异常类?

标签: c++

解决方案


推荐阅读