Nas*_*ser 2 wolfram-mathematica
我试图看看我是否可以在Manipulate中创建自己的模拟循环,因为我对Trigger控件或使用Tasks都不满意(两者都有我想做的问题和限制).
所以,我试图看看我是否可以创建自己的控制循环,这样我可以更好地控制事物,通过单击"运行"按钮,模拟循环将开始,直到单击"停止"按钮.
一个基本问题是,即使我正在使用,操作也会在5秒后超时SynchronousUpdating -> False.也就是当我点击"运行"按钮时,我开始循环(Pause[]当然有一些循环),然后将在循环中更新某些内容.这样可以正常工作,但是5秒后,循环自行停止,因为Manipulate决定超时.
我可能会误解一些基本的东西.我在下面举例说明:
Manipulate[
Dynamic[Refresh[Text@x,TrackedSymbols->{x}]],
{{x,0},ControlType->None},
{{running,True},ControlType->None},
Button[Text["play"],
{
running=True,
While[running,
x+=1;
FinishDynamic[];
Pause[0.1]
]
}],
Button[Text["stop"],
running=False
],
TrackedSymbols->{None},
SynchronousUpdating->False,
SynchronousInitialization->False
]
Run Code Online (Sandbox Code Playgroud)
运行上述操作时,它总是在大约58秒左右停止,大约是5秒,即Manipulate的超时值

在Manipulate之外,它按预期工作正常:
x = 0;
Dynamic[Refresh[x, UpdateInterval -> 0.001]]
Do[
(
x += 1;
FinishDynamic[];
Print[x];
Pause[0.01]
), {i, 0, 200}
]
Run Code Online (Sandbox Code Playgroud)
我可以把数量大到我想要的数量,没问题.
因此,它似乎是Manipulate的一个配置选项,但我现在无法找到它需要使用哪个选项才能使用它.
谢谢
更新
使用Simon下面给出的方法 - >"排队",现在循环工作.但是这个方法存在问题:我在Button运行时不能使用Mathematica,即使循环中有大的暂停,因为它会阻塞整个前端.它的行为就像按下按钮一直一样.所以,这个想法是不可能的.嗯,这是尝试的东西.
顺便说一句,这是一个提及这个的好时机,我发现使用'code'类型的单元而不是默认的'input'导致内核中出现很多崩溃.刚刚尝试了单元格类型的"代码",只需点击几下按钮,内核就崩溃了:

所以我不再使用"代码"类型的单元格.
回到绘图板.
更新2:8/29/11,下午6点
使用Mathematica 8.0.1,在Windows 7,SP1,intel pc上,这里是使用"代码"单元时崩溃的代码
Manipulate[
Dynamic[Refresh[Text@x,TrackedSymbols->{x},UpdateInterval->0.005]],
{{x,0},ControlType->None},
{{running,True},ControlType->None},
Button[Text["play"],
{
running=True,
While[running,
x+=1;
FinishDynamic[];
]
},Method->"Queued"],
Button[Text["stop"],
running=False
],
TrackedSymbols->{None},
SynchronousUpdating->False,
SynchronousInitialization->False
]
Run Code Online (Sandbox Code Playgroud)
可能有人可以尝试以上?不得不点击开始/停止几次让它崩溃.
我可以重现这个.

更新9/2/11
在新的答案:看起来西蒙版(下面的第二个)在我的电脑上似乎更快,Mathematica 8.0.1.我同时开始,Simon版本似乎运行得更快(计数器运行得更快).
屏幕截图:

| 归档时间: |
|
| 查看次数: |
1382 次 |
| 最近记录: |