这个问题更多的是出于个人的好奇心而不是重要的事情 . 我试图让我的所有代码至少与Windows和Mac兼容 . 到目前为止,我已经了解到我应该将我的代码 Build 在POSIX上,这很棒但是......
Windows没有 sigaction
函数,因此使用 signal
?根据:What is the difference between sigaction and signal?信号存在一些问题 .
当前处理程序执行时,signal()函数不会阻止其他信号到达; sigaction()可以阻止其他信号,直到当前处理程序返回 . signal()函数将信号操作重置为几乎所有信号的SIG_DFL(默认值) . 这意味着signal()处理程序必须重新安装自己作为其第一个操作 . 它还会在检测到信号和重新安装处理程序之间打开一个漏洞窗口,在此期间,如果信号的第二个实例到达,则会发生默认行为(通常是终止,有时带有偏见 - 也称为核心转储) .
如果两个SIGINT快速到来,那么应用程序将以默认行为终止 . 有没有办法解决这个问题?这两个问题对一个过程有什么其他影响,例如想要阻止SIGINT?使用信号时是否还有其他问题?我该如何解决?
1 回答
你根本不想处理signal() .
你想要“事件” .
理想情况下,您将找到一个可移植到您希望定位的所有主要环境的框架 - 这将决定您选择的“事件”实现 .
这是一个可能有用的有趣线程:
Game Objects Talking To Each Other
PS:signal()和sigaction()之间的主要区别在于sigaction()是类固醇上的“signal()” - 更多选项,允许SA_RESTART等 . 我不鼓励使用任何一个,除非你真的,真的需要 .