小编Isa*_*ife的帖子

如何编写跨平台 C++ 来处理信号?

这个问题更多的是出于我个人的好奇心,而不是任何重要的事情。我试图让我的所有代码至少与 Windows 和 Mac 兼容。到目前为止,我已经了解到我应该将我的代码基于 POSIX,这很好,但是......

Windows没有这个sigaction功能所以signal用吗?根据: sigaction 和 signal 有什么区别?信号存在一些问题。

  1. 当当前处理程序正在执行时,signal() 函数不会阻止其他信号到达;sigaction() 可以阻止其他信号,直到当前处理程序返回。
  2. signal() 函数将几乎所有信号的信号操作重置回 SIG_DFL(默认)。这意味着 signal() 处理程序必须重新安装自身作为其第一个操作。它还在检测到信号和重新安装处理程序之间打开了一个漏洞窗口,在此期间,如果信号的第二个实例到达,则会发生默认行为(通常终止,有时会产生偏见 - 又名核心转储)。

如果两个 SIGINT 很快到来,那么应用程序将以默认行为终止。有什么办法可以纠正这种行为吗?这两个问题对想要阻止 SIGINT 的进程还有什么其他影响?在使用信号时我可能会遇到任何其他问题吗?我该如何修复它们?

c++ windows macos signals cross-platform

4
推荐指数
1
解决办法
4085
查看次数

标签 统计

c++ ×1

cross-platform ×1

macos ×1

signals ×1

windows ×1