Что означает SIGINT в собственном API NT?
-
28-10-2019 - |
Вопрос
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.