MathLink函数中的CheckAbort?

时间:2011-04-12 13:39:39

标签: wolfram-mathematica mathlink

我刚发现MathLinkLinkWrite这样的LinkRead函数有类似于它自己的内部CheckAbort,可以吸收任何中止,并且不会进一步传播它们。 / p>

可以使用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

有没有办法拦截LinkReadLinkWrite等功能所吸收的中止?

1 个答案:

答案 0 :(得分:1)

MathLink的工作方式,LinkRead阻止链接上没有任何内容可读。如果此时尝试中止,则会通过MathLink消息通道将中止消息传递到链接的另一端。如果另一端的程序运行良好,它将丢弃它正在做的任何事情并发送一个返回值(在许多情况下$Aborted)。如果要将中止传播到链接的末尾,以便可以使用CheckAbort捕获它,则需要检查返回值并生成另一个中止,例如:

 If[LinkRead[link] == $Aborted, Abort[]]

如果您知道链接的另一端在中止的情况下返回$Aborted,则此方法有效。