Почему SEH считается "асинхронным"? - PullRequest
0 голосов
/ 24 мая 2019

В нескольких статьях / ответах, которые я прочитал о SEH (Структурная обработка исключений), он рассматривается как «асинхронный».

Насколько я понимаю, вся часть обработки этих исключений происходит в потоке, который их вызвал (на уровне ЦП). По сути, как только возникает исключение, исключение «переходит» к коду ОС, который повторяется в списке обработчиков исключений текущего потока.

Так правильно ли мое понимание? Что именно асинхронно в SEH?

1 Ответ

3 голосов
/ 24 мая 2019

В синхронной модели обработки исключений исключения всегда генерируются явно;фактический оператор throw должен встречаться в исходном коде в известной и четко определенной точке потока команд, чтобы компилятор знал, когда могут возникать исключения (это также означает, что он может оптимизировать код обработки исключений, если он может доказатьисключений не может быть).

SEH - об исключениях, запускаемых процессором, вещи, которые сам код не осознавал, могли произойти, но были, так сказать, «вне диапазона».Оно асинхронно в том смысле, что исключение внедряется в код, который не знал, что это может даже произойти, во многом аналогично тому, как обработчики сигналов могут выполняться в главном потоке, прерывая то, что фактически происходило в момент получения сигнала.

SEH можно рассматривать во многом как временно зарегистрированные обработчики сигналов, где исключительные условия являются сигналами, блоки __try определяют, где действует обработчик, а блоки __except и __finally являются обработчиками, если "сигнал "получен.

...