Я только что обнаружил, что такие MathLink
функции как LinkWrite
и LinkRead
имеют нечто вроде собственного внутреннего CheckAbort
, которое поглощает любые прерывания и не распространяется дальше.
Это легко показать с помощью LinkRead
:
link = LinkLaunch[First[$CommandLine] <> " -mathlink"];
LinkRead[link];
LinkWrite[link, Unevaluated[Pause[10]]];
{LinkRead[link], Print["!!"]}
После оценки вышеуказанного кода нажмите Alt + ., и вы получите следующий вывод:
During evaluation of In[6]:= !!
Out[9]= {ReturnPacket[$Aborted], Null}
Как вы видите, прерывание было поглощено LinkRead
.
Моя проблема в том, что он разбивает мой собственный контроль потока на основе CheckAbort
.
Есть ли способ перехватить прерывания, поглощенные такими функциями, как LinkRead
и LinkWrite
?