Windows应用程序是否支持SIGINT用于用户定义的信号处理程序?

问题描述

specs说:

SIGINT不支持任何Win32应用程序。发生CTRL + C中断时,Win32操作系统会生成一个新线程来专门处理该中断。这可能会导致单线程应用程序(例如UNIX中的应用程序)变为多线程并导致意外行为。

我认为这意味着默认情况下,SIG_DFL的{​​{1}}处理程序将创建一个新线程,处理信号,然后终止程序。我想知道,Windows是否支持用户定义的SIGINT处理程序,或者如果发生CTRL + C中断,操作系统是否会忽略该处理程序,并且默认的SIGINT处理程序将运行?

例如,以下代码会打印SIG_DFL吗?

Signaled!

解决方法

实际上Win32确实在Ctrl-C上触发了SIGINT,但有一些警告:

  • 它是从另一个线程触发的,
  • 每次击中后都需要重新布防。

第二个项目符号引入了竞争条件,因此最好使用Win32本机SetConsoleCtrlHandler

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...