2011-08-15 46 views
3

我有点难以理解ScheduledTask []。这是在第V 8.Mathematica中的ScheduleTask是否对时间间隔有任何限制?

加入在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[]] 

五金我是:英特尔i7处理器930,2.8GHz的4核心

+3

在“CreateScheduledTask”文档中的“更多信息”中,它表示“默认情况下,如果评估expr所需的时间大于时间,则下一个待执行的评估将被跳过。所以也许这就是问题所在(尽管我会认为将1添加到c需要大约0.01秒的时间)。 – Heike

+0

我认为这是时钟的限制,而不是将数字加1。任务时钟的运行速度不能超过每个插槽大约20毫秒,在我的系统上,这是0.02秒。这就是我所看到的。但我同意你的看法,关于这个功能的文档可以做得更加详细和清晰。 – Nasser

回答

4

虽然Windows 定时器据说可以测量成ns粒度的任务调度器的粒度更低。我发现它报告(herehere)分别在10-15ms和20ms的倍数之间。因此,我认为你应该至少使用20毫秒的间隔来确保你仍然不能保证获得一个插槽,所以你不应该依赖它。

+0

+1,谢谢。是的,20毫秒实际上是我所看到的。所以我的计算错误。纠正。 10-20毫秒与我阅读的内容相符。这应在“可能的问题”下的文档中提及。 – Nasser

相关问题