Что переводит SIGINT в нативный API NT?
Windows имеет поддержку SIGINT в консольных приложениях в ответ на Ctrl-C. Это подразумевает, что в Windows есть функциональные возможности для прерывания запущенного потока из удаленного потока (даже процесса!) И вызова обработчика сигнала.
Как именно это работает на уровне NT Native API? Можно ли использовать этот API прерывания потока для других целей в пользовательском пространстве?
2 ответа
Согласно http://msdn.microsoft.com/en-us/library/xdkz3x12(v=vs.71).aspx, SIGINT вызывает создание нового потока для обработки прерывания.
Похоже, что он не "прерывает" ни один из запущенных потоков. Вы можете достичь того же эффекта, просто создавая свой собственный поток.
Здесь есть больше комментариев:
Вы всегда можете приостановить целевой поток, исправить контекст, чтобы выполнить вашу процедуру, а затем возобновить ее. Это некрасиво, но сработало бы, если бы вы хотели прервать поток для выполнения процедуры.
Консоль и обработчик CTRL+C являются конструкциями Win32 и на самом деле не существуют на уровне API.