首页 文章

如何编写处理信号的跨平台c?

提问于
浏览
3

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

Windows没有 sigaction 函数,因此使用 signal ?根据:What is the difference between sigaction and signal?信号存在一些问题 .

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

如果两个SIGINT快速到来,那么应用程序将以默认行为终止 . 有没有办法解决这个问题?这两个问题对一个过程有什么其他影响,例如想要阻止SIGINT?使用信号时是否还有其他问题?我该如何解决?

1 回答

  • 4

    你根本不想处理signal() .

    你想要“事件” .

    理想情况下,您将找到一个可移植到您希望定位的所有主要环境的框架 - 这将决定您选择的“事件”实现 .

    这是一个可能有用的有趣线程:

    Game Objects Talking To Each Other

    PS:signal()和sigaction()之间的主要区别在于sigaction()是类固醇上的“signal()” - 更多选项,允许SA_RESTART等 . 我不鼓励使用任何一个,除非你真的,真的需要 .

相关问题