在 C++ 中,当用 ctrl-c 中断时,在死亡之前调用带参数(信号号除外)的函数

2024-03-29

我想在程序终止之前用 ctrl-c 中断时向文件中写入几行。然而,文件的位置不是硬编码的,所以我需要比正常中断处理更多的东西正如这里所解释的 https://stackoverflow.com/questions/1641182/how-can-i-catch-a-ctrl-c-event-c。做这个的最好方式是什么?


动机:
我正在做与时间相关的有限元模拟。有时我忘记或错误估计了合理的 tmax,并且模拟需要很长时间才能完成,所以我用 ctrl-c 中断它。但是我仍然想使用到目前为止生成的数据。特别是有一个 xml 文件,在模拟完成后需要附加几行来关闭标签。当然,可以手动完成此操作,但这很痛苦,所以我尝试将其自动化。


基于“的答案”如何捕获 ctrl-c 事件? (C++) https://stackoverflow.com/questions/1641182/how-can-i-catch-a-ctrl-c-event-c“我们可以安装一个仅引发异常的信号处理程序。然后我们可以捕获异常并运行我们喜欢的任何标准 C++ 代码。

这是一个工作示例:

#include <iostream>
#include <exception>
#include <signal.h>
#include <stdlib.h>


class InterruptException : public std::exception
{
public:
  InterruptException(int s) : S(s) {}
  int S;
};


void sig_to_exception(int s)
{
  throw InterruptException(s);
}


int main()
  {
    // Taken from answer to "How can I catch a ctrl-c event? (C++)"
    struct sigaction sigIntHandler;
    sigIntHandler.sa_handler = sig_to_exception;
    sigemptyset(&sigIntHandler.sa_mask);
    sigIntHandler.sa_flags = 0;
    sigaction(SIGINT, &sigIntHandler, NULL);


    try
      {
        std::cout << "Inside try" << std::endl;

        // Do something with output so the loop doesn't get optimised out
        double i = 0;
        while(i < 1e30) {i++;} // loop until interrupted
        std::cout << i << std::endl;
      }
    catch(InterruptException& e)
      {
        std::cout << "Write something to file" << std::endl;
        std::cout << "Caught signal " << e.S << std::endl;
        return 1;
      }

    return 0;
  }

这种方法至少有一个缺点:在尝试安装处理程序后,我们必须包装所有内容,否则中断信号将导致 abort()。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中,当用 ctrl-c 中断时,在死亡之前调用带参数(信号号除外)的函数 的相关文章

随机推荐

  • 如何使用实体框架将存储过程的结果映射到具有不同命名参数的实体

    我正在尝试使用实体框架创建一个基本示例 以将 SQL Server 存储过程的输出映射到 C 中的实体 但该实体具有不同 友好 的名称参数 而不是更神秘的名称 我还尝试使用 Fluent 即非 edmx 语法来做到这一点 什么有效 存储过程
  • -XX:MaxPermSize 带或不带 -XX:PermSize

    我们遇到了一个Java lang OutOfMemoryError 永久代空间错误并查看 tomcat JVM 参数 除了 Xms and Xmx我们还指定了参数 XX MaxPermSize 128m 经过一些分析后 我可以看到 Perm
  • 将 Leaflet 与 Ionic2 typescript 一起使用

    我是新来的Ionic2 and Angular2 with 打字稿我想为 iOS 和 Android 构建一个移动应用程序 下一步我想包括一张地图并找到Leaflet 在 GoogleMaps 和 OSM 之间轻松更改 所以 我的问题从安装
  • MSBuild条件编译

    我有一个 Web 服务类 框架的其余部分依赖它来获取其数据 但是 Web 服务类需要根据其所处的环境具有不同的方法属性 例如 SoapDocumentMethodAttribute https example public string T
  • 在内存中运行 Docker?

    据我了解 Docker 使用内存映射文件从镜像启动 由于我可以一遍又一遍地执行此操作 并且据我记得并行启动同一图像的不同实例 我猜 docker 抽象了文件系统并将更改存储在其他地方 我想知道 docker 是否可以配置 或者默认情况下 以
  • 从一个 Visual Studio 实例调试程序的多个副本

    我有一个 pre alpha GUI 程序内部测试 http en wikipedia org wiki Eat one 27s own dog food并希望在调试器下运行 当出现问题时 但我不想为应用程序的每个实例启动 Visual S
  • 如何检测网格单元格中的点击并更改其颜色?

    对 python 相当陌生 并试图重新创建我在学校玩的游戏 对于这个游戏 我需要随机产生这些炸弹 如果击中 这些炸弹会将您的银行帐户减少到零 并将方块的炸弹方块的颜色更改为红色 而安全的则变为绿色 我遇到的问题是 我想将炸弹方块的颜色改为红
  • 验证是否有可用网络连接的最简单方法是什么?

    我是 c net 开发的新手 但我已经为我公司的一小部分资产编写了一个股票跟踪应用程序 我还在 SQL 2000 中设置了它连接的数据库 目前 当网络连接可用时 它可以正常工作 但我想扩展它 以便在没有连接时使用 首先 我需要知道是否有可用
  • 如何在 LWUIT 选项卡上显示表单屏幕?

    我在表单上有列表项 当用户单击选项卡时 我必须在选项卡上显示该表单 之后如何将该表单添加到选项卡form show 或者之前 我需要使用表单屏幕默认显示第一个选项卡 您可以在选项卡中显示表单 形式也是一个组件 Form frmObj new
  • 设置 Text().frame(maxWidth: .infinity) 后如何保持 Text 作为前导对齐

    这可能是一个简单的案例 但我找不到解决方案 这是我的代码 使用 GeometryReader 设置 SwiftUI 视图大小的相对布局 如 Image 问题出现在最后一个VStack上 我希望文本的背景转到VStack的右端 因此 我将其设
  • OG:类型文章与网站,用于非文章的单个网页

    我正在寻求有关 og type 文章与网站对于单个网页的使用的澄清 该网页在技术上不是 文章 但也不代表整个网站 文档似乎矛盾 From https developers facebook com docs opengraphprotoco
  • 使用正则表达式从内容中删除 HTML 注释 [重复]

    这个问题在这里已经有答案了 我正在将页面内容放入变量中 content 我需要使用正则表达式从 content 中删除 HTML 注释 我尝试了以下代码 它无法正常工作 content preg replace content 看起来你错过
  • 清理 React Hooks 中未安装组件的内存泄漏

    我是 React 的新手 所以这可能很容易实现 但即使我做了一些研究 我自己也无法弄清楚 如果这太愚蠢了 请原谅我 Context 我在用着惯性 js https inertiajs com 使用 Laravel 后端 和 React 前端
  • mysql 命令超时错误

    我正在使用 asp net mvc 将数据库从 SQL Server 2005 转换为 MySQL 我在 SQL Server 中有大量数据 400k 记录 但我面临命令超时 等待CommandTimeout错误 当我在 Google 上搜
  • 如何让JNLP下载正确版本的JavaFX 2?

    JavaFX 2 高度依赖本机代码 对于我的桌面应用程序 我想为每个受支持的操作系统选择最匹配的 JavaFX 风格 以使目标系统上的安装尽可能轻松 由于 JavaFX 2 附带了几个 Ant 任务来帮助部署 我认为这是可行的方法 但我似乎
  • 如何获取点击时的CSS悬停值?

    对此进行后续跟进question https stackoverflow com questions 7265418 how can i unbind the hover opacity effect of a text link when
  • 从地图中删除 google.maps.marker.AdvancedMarkerView

    我有一张地图 它根据搜索填充标记 我正在尝试使用较新的谷歌地图功能AdvancedMarkerView所以我可以用自定义 HTML 填充它 但是 随着我的搜索更新 我想刷新旧标记并在需要时放置新标记 但我一生都无法弄清楚如何做 https
  • 如何使用 Swift 和 MacOS 隐藏顶部栏(带按钮)?

    我试图从窗口中删除标题和顶部按钮 基本上只显示内容 我尝试过各种方法但没有成功 也没有任何明显的原因说明它不起作用 有关我尝试过的选项 请参阅 setVisibility 函数 AppDelegate swift import Cocoa
  • 可以在 JSON 对象中使用尾随逗号吗?

    手动生成 JSON 对象或数组时 在对象或数组的最后一项上留下尾随逗号通常更容易 例如 从字符串数组输出的代码可能如下所示 在类似 C 的伪代码中 s append for i 0 i lt 5 i s appendF d i s appe
  • 在 C++ 中,当用 ctrl-c 中断时,在死亡之前调用带参数(信号号除外)的函数

    我想在程序终止之前用 ctrl c 中断时向文件中写入几行 然而 文件的位置不是硬编码的 所以我需要比正常中断处理更多的东西正如这里所解释的 https stackoverflow com questions 1641182 how can