相关疑难解决方法(0)

如何覆盖exit(),也许是通过抛出异常

我们有一个第三方库,编写时没有考虑多线程或异常处理.我们的主要可执行文件是多线程的并使用异常.

第三方库用于exit()中止程序以解决严重问题(例如"未初始化驱动程序"或"未找到文件").exit()不允许调用多线程应用程序,因为它不能正确关闭线程.另外,我真的不想退出主应用程序,因为它是一个服务器应用程序,并且在许多情况下,主程序可以采取主动的事情来从错误中恢复.

我想基本上exit(int status)用我自己的函数替换系统提供的函数,即

class exit_exception : public runtime_error 
{
    public: exit_exception(int status) 
      : runtime_error("exit called with status " + to_string(status)) {}      
};

extern "C" void exit(int status) {
    throw  exit_exception(status);
}
Run Code Online (Sandbox Code Playgroud)

并在我的代码中捕获异常.它似乎有效,但这显然是一种黑客行为,而不是大自然打算exit()使用的方式.不知道我做错了什么?

编辑

许多人建议我把它放在一个单独的过程中,但这会打败很多东西.第三方库执行非常高速的数据传输,需要在主应用程序进程中,因为它位于相同的虚拟内存空间中,不用于malloc从作为控制器的FPGA协处理器分配内存.这段代码接近"铁",并且正在挤压内存和PCIe总线的每一点带宽.

编辑2

我的程序仍可以返回状态代码与返回值的OS int main(),这并没有最终调用exit().否则我会遇到麻烦.

c c++

8
推荐指数
1
解决办法
1588
查看次数

标签 统计

c ×1

c++ ×1