2011-08-15 73 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

相關問題