我有点难以理解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毫秒的间隔来确保,然后你仍然不能保证得到一个插槽,所以你不应该依赖它。