3

我有点难以理解 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(当然取决于硬件)可以提供比这小得多的 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

4

1 回答 1

4

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

于 2011-08-15T11:32:40.333 回答