Mathematica中的ScheduleTask,它对使用的时间间隔有限制吗?

时间:2011-08-15 10:15:03

标签: wolfram-mathematica mathematica-8

我在理解ScheduledTask []时遇到了一些困难。这是在V 8中添加的。

在Windows 7,64位上,使用V 8.01,当我运行以下代码时

dt = 0.01;
c = 0;
Dynamic[c]
task = CreateScheduledTask[c += 1, {dt, 100}];
StartScheduledTask[task];

我得到'c'以值51结尾,而不是预期的100。

当我将'dt'更改为更高的值(例如0.02)或任何其他大于0.02秒的值时,我每次都会得到100.

如果我'dt'为0.005,我最终得到c = 27。使'dt'为0.0025,c变为18,依此类推。

所以,'dt'限制(CPU时间粒度)似乎是0.02来得到我想要的。这是20毫秒。

但是从其他网站,我看到Windows 7(取决于HW)可以提供远小于此的cpu时钟分辨率。可能是1-10毫秒。

我在这里遗漏了什么,还是我误解了这个功能?

有关此功能的帮助说

creates a task that will try evaluating expr once every time seconds up to count times total

我无法使用Mathematica自己的文档找到更多相关信息,但我可能忽略了它。

此功能的文档是http://reference.wolfram.com/mathematica/ref/CreateScheduledTask.html

由于 PS。完成后删除任务,命令是

RemoveScheduledTask[task]

或清理一切:

RemoveScheduledTask[ScheduledTasks[]]
我拥有的硬件是:Intel i7 CPU 930,2.8 Ghz 4 core

1 个答案:

答案 0 :(得分:4)

虽然据报道windows timer 可以测量ns粒度,但任务 scheduler 的粒度要低得多。我发现它报告(herehere)分别在10-15ms和20ms的倍数之间。我认为你应该使用至少20毫秒的间距来确定,然后你仍然不能保证得到一个插槽,所以你永远不应该依赖它。