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



我有点难以理解scheduletask[]。

在windows 7, 64位,使用v8.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(当然取决于硬件)可以提供比这小得多的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核

尽管据报道windows 计时器可以测量到ns粒度,但任务调度程序的粒度要低得多。我发现报告(这里和这里)分别在10-15毫秒和20毫秒的倍数之间。因此,我认为你应该使用至少20毫秒的间隔来确保,然后你仍然不能保证得到一个插槽,所以你不应该依赖它。

最新更新