Task はスケジューリングや、繰り返し処理をされることが可能な関数です。この関数に対してアーギュメントを設定することができ、関数が呼び出された場合にオブジェクトは this として扱われます。
var tsk = new Task(function, object, arguments);
アーギュメント object はこの関数が実行されている間、 this を表しています。this キーワードを使うことによって(jsthis オブジェクトを参照して)、アウトレットや js オブジェクトの他の機能を使うことができます。function アーギュメントは実行したい機能を表し、arguments(配列)は関数に渡すアーギュメントを表します。object と arguments というアーギュメントはオプションです。これらのアーギュメントが存在しない場合、object は関数の親オブジェクト(通常は jsthis)であるとみなされ、関数にアーギュメントは提供されません。
例:
function ticker(a,b,c) { post("tick"); } args = new Array(3); args[0] = 1; args[1] = 2; args[2] = 3; t = new Task(ticker,this,args);
Task 関数の全体的なタイミングの精度は高いのですが、関数は低い優先度のスレッドで実行されるため、スケジュールされた時間とTask 関数の実際の実行時間の間のレイテンシ(遅れ)は変化します。従って、タイムクリティカルな(時間が極めて重大な意味を持つような)操作においては、Task 関数の使用は避けるべきです。
便宜的に、Task オブジェクトは実行される関数のプロパティとして扱われます。関数の中で Task にアクセスするためには、次の、標準的な Javascript 構文を使います。
arguments.callee.task
Task のインターバルを変更するための、この構文の使用例については後述します。
arguments (Array,get/set)
function (Function, get/set)
running (Boolean, get)
interval (Number, get/set)
function taskfun() { var intv = arguments.callee.task.interval; arguments.callee.task.interval = intv + (intv * 0.1); }
object (Object, get/set)
例:
タスクの object プロパティが js オブジェクトの場合、次の3行のコードはタスク関数の中では基本的に同じものになります。arguments.callee.task.object.outlet(1,"bang"); outlet(1,"bang"); this.outlet(1,"bang");
iterations (Number, get)
repeat (number, initialdelay)
例:
tsk = new Task(this,repeater_function); tsk.interval = 1000; // 1秒毎に tsk.repeat(3); // 3回実行します
次は、繰り返しの回数を Max ウィンドウに表示する繰り返し関数です。
function repeater_function() { post(arguments.callee.task.iterations); }
上の例では、Max ウィンドウの出力は次のようになります。
1
2
3
execute ()
schedule (delay)
cancel ()
function once() { arguments.callee.task.cancel(); }