Wolfram mathematica 如何检查前端是否认为评估仍在运行?

Wolfram mathematica 如何检查前端是否认为评估仍在运行?,wolfram-mathematica,mathematica-frontend,Wolfram Mathematica,Mathematica Frontend,有没有办法通过编程检查前端是否认为评估仍在运行? 或者更好:有没有办法检查前端是否有一些挂起的输入要发送到内核 附:这个问题是由我提出的 编辑 在前端计算单元时,我们通常为内核创建一个输入队列 如果前端已将EvaluationNotebook[]中输入队列的最后一个输入发送到内核,我需要一个返回True的函数。或者换句话说,如果当前输入是前端生成的输入队列的最后一个输入,我需要一个返回True的函数。显然,最好使用Monitor之类的工具进行设置。比如说, Monitor[ Do[Pause

有没有办法通过编程检查前端是否认为评估仍在运行? 或者更好:有没有办法检查前端是否有一些挂起的输入要发送到内核

附:这个问题是由我提出的

编辑

在前端计算单元时,我们通常为内核创建一个输入队列


如果前端已将
EvaluationNotebook[]
中输入队列的最后一个输入发送到内核,我需要一个返回
True
的函数。或者换句话说,如果当前输入是前端生成的输入队列的最后一个输入,我需要一个返回
True
的函数。

显然,最好使用
Monitor
之类的工具进行设置。比如说,

Monitor[
  Do[Pause[6], {i, 10}],
i]
将允许您观察索引变量
i
的进度。如果您之前没有进行设置,您可以使用评估菜单下的“中断评估”按钮进行操作。例如,请尝试以下操作:

Do[Pause[6], {i, 10}]

现在,等待六秒或更长时间,然后选择“中断评估”。然后,您可以检查
i
的状态,以查看它到底有多远。您可以使用“调试器控件”下的“继续”继续进行求值。

这应该可以。当然,您必须在不同的内核中运行它,而不是在执行要检查的评估的内核中运行它

NotebookEvaluatingQ[nb_] := (
 SelectionMove[nb, All, Notebook];
 Or @@ Map["Evaluating" /. # &, Developer`CellInformation[nb]]
)

@马克:我需要编程控制,而不是视觉控制。我需要一个函数,该函数将返回
True
,前提是前端已从
EvaluationNotebook[]向内核发送了输入队列的最后一个输入(在计算单元格时,我们通常为内核创建一个输入队列)
@Alexey我很想知道你在做什么,需要你最近询问的所有模糊功能。这应该是可能的,因为有
PrintTemporary
的行为类似:它在完成对当前输入单元格的求值后删除打印的
单元格
,如文档所述,在完成当前输入行的评估之后。@Mr.Wizard我已经给出了我在这个问题中试图解决的整个问题的答案。我的
MathLink
程序需要它,我是从那里开始开发的。@Alexey所以这一切都与“从v.7.01中执行v.5.2内核中的代码”有关,对吗?+1指出
开发人员的CellInformation
!但是为这么小的任务运行一个单独的内核不是太贵了吗?一个只有这个定义的内核不应该太贵。“将返回True的函数…”必须在到原始内核的抢先链接上进行求值,才能在排队求值之前返回。这可能必须通过MathLink`函数实现,但我不确定如何实现。学习如何建立先发制人的链接将非常有趣。目前我只知道这样的链接是可能的,但对于如何创建它们却一无所知。自版本6以来,每个内核和FE之间都存在一个抢先链接和一个排队链接。当按钮的方法选项设置为“抢占”时,抢占链接用于动态评估和按钮评估。某些FrontEndToken构造可能会设法获取此信息并在您要检查的评估之前返回,但我不知道如何返回。我建议对类似的事情使用第二个内核。