Windows 在控制台应用程序中支持SIGINT以响应 Ctrl-C。这意味着 Windows 具有从远程线程(甚至是进程!)中断正在运行的线程并调用信号处理程序的功能。
这在 NT Native API 级别究竟是如何工作的?这个线程中断 API 可以用于用户空间的其他目的吗?
Windows 在控制台应用程序中支持SIGINT以响应 Ctrl-C。这意味着 Windows 具有从远程线程(甚至是进程!)中断正在运行的线程并调用信号处理程序的功能。
这在 NT Native API 级别究竟是如何工作的?这个线程中断 API 可以用于用户空间的其他目的吗?
根据http://msdn.microsoft.com/en-us/library/xdkz3x12(v=vs.71).aspx,SIGINT 会导致创建一个新线程来处理中断。
所以看起来它并没有真正“中断”任何正在运行的线程。您可以通过简单地生成自己的线程来实现相同的效果。
这里有更多评论:
您始终可以暂停目标线程,修复上下文以执行您的过程,然后恢复它。这很丑,但如果你想中断一个线程来执行一个过程,它会起作用。
控制台和 CTRL+C 处理程序是 Win32 结构,并不真正存在于本机 API 级别。