如何检查FrontEnd是否认为评估仍在运行?

时间:2011-04-13 00:58:41

标签: wolfram-mathematica mathematica-frontend

有没有办法以编程方式检查FrontEnd是否认为评估仍在运行? 甚至更好:有没有办法检查FrontEnd是否有一些待发送的输入发送到内核?

P.S。这个问题来自previous question

修改

在评估FrontEnd中的Cell时,我们通常会为内核创建一个输入队列。

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

2 个答案:

答案 0 :(得分:2)

这应该有效。当然,您必须在与执行要检查的评估的内核不同的内核中运行它。

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

答案 1 :(得分:0)

显然,最好先使用像Monitor这样的工具进行设置。例如,

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

将允许您观察索引变量i的进度。如果您事先没有进行设置,则可以使用“评估”菜单下的“中断评估”按钮执行某些操作。例如,尝试以下操作:

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

现在,等待六秒或更长时间,然后选择“中断评估”。然后,您可以检查i的状态,以了解它的详细程度。您可以使用“调试器控件”下的“继续”继续评估。