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];

期待どおりの 100 ではなく、値 51 で終わる 'c' を取得します。

上記の「dt」をより大きな値、たとえば 0.02 秒、または 0.02 秒よりも大きな値に変更すると、毎回 100 になります。

'dt' を 0.005 にすると、c=27 になります。'dt' を 0.0025 にすると、c は 18 になります。

したがって、「dt」制限 (CPU 時間の粒度) は、私が望むものを得るには 0.02 のようです。これは 20 ミリ秒です。

しかし、他の Web サイトから、Windows 7 (もちろん HW に依存します) はこれよりもはるかに小さい 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です

ありがとうございます。完了時にタスクを削除するには、コマンドは次のとおりです

RemoveScheduledTask[task]

またはすべてをきれいにする:

RemoveScheduledTask[ScheduledTasks[]]

私が持っているハードウェアは次のとおりです: Intel i7 CPU 930、2.8 Ghz 4 コア

4

1 に答える 1

4

Windowsタイマーは ns の粒度まで測定できると報告されていますが、タスクスケジューラの粒度ははるかに低くなります。それぞれ 10 ~ 15 ミリ秒と 20 ミリ秒の倍数であると報告されています (ここここ)。したがって、確実に最低20ミリ秒の間隔を使用する必要があると思いますが、それでもスロットを取得することが保証されていないため、それに依存するべきではありません。

于 2011-08-15T11:32:40.333 に答える