Task オブジェクト

Task はスケジューリングや、繰り返し処理をされることが可能な関数です。この関数に対してアーギュメントを設定することができ、関数が呼び出された場合にオブジェクトは this として扱われます。

Task コンストラクタ

var tsk = new Task(function, object, arguments);

アーギュメント object はこの関数が実行されている間、 this を表しています。this キーワードを使うことによって(jsthis オブジェクトを参照して)、アウトレットや js オブジェクトの他の機能を使うことができます。function アーギュメントは実行したい機能を表し、arguments(配列)は関数に渡すアーギュメントを表します。objectarguments というアーギュメントはオプションです。これらのアーギュメントが存在しない場合、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 オブジェクトは実行される関数のプロパティとして扱われます。関数の中で Task にアクセスするためには、次の、標準的な Javascript 構文を使います。

arguments.callee.task

Task のインターバルを変更するための、この構文の使用例については後述します。

arguments (Array,get/set)

Task 関数に渡されるアーギュメント。arguments[0] が最初のアーギュメントです。

function (Function, get/set)

Task の中で実行される関数。タスク関数自身の中でこれを変更することもできます。

running (Boolean, get)

Task が実行されているかどうか。タスクの中で関数が実行されている最中ならば、これは常に 1 になります。

interval (Number, get/set)

ミリセカンドで表されるタスク関数の繰り返しの間隔。デフォルトの間隔は 500 ミリセカンドです。次の例は、関数が呼び出される度に Task の実行が 10% 遅くなるような関数を持った Task の例です。これは、上で述べた arguments.callee.task という構文を使っています。

function taskfun() { var intv = arguments.callee.task.interval; arguments.callee.task.interval = intv + (intv * 0.1); }

object (Object, get/set)

タスク関数の中で this に割り当てられるオブジェクト。ほとんどの場合、これは jsthis オブジェクトになるため、例えば、outlet() メソッドにアクセスすることができます。最初のアーギュメントとして キーワード this を使って Task を作ることにより、jsthis オブジェクトが this になるようにセットアップすることができます。

例:

タスクの object プロパティが js オブジェクトの場合、次の3行のコードはタスク関数の中では基本的に同じものになります。

arguments.callee.task.object.outlet(1,"bang"); outlet(1,"bang"); this.outlet(1,"bang");

iterations (Number, get)

タスク関数が呼び出される回数。タスク関数の外部では、iterations の値は常に 0 になります。この値はタスクが(「Task メソッド」セクションで述べられている、 repeat() execute()shcedule() メソッドを使って)スタートする度にリセットされます。

Task メソッド

repeat (number, initialdelay)

タスク関数を繰り返します。オプションの 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 ()

直ちに、タスクを1回実行します。タスク関数をそのアーギュメントと共に呼び出すことと同じです。

schedule (delay)

ディレイ時間の後、タスクを1回実行します。オプションの delay アーギュメントはタスク関数が実行されるまでの時間を(ミリセカンドで)設定します。

cancel ()

タスクがスケジュールされているか、または繰り返されている場合に、将来の実行をキャンセルします。このメソッドはタスク関数の中で、自分自身をキャンセルするために使用することができます。次の例は、タスクが repeat() 関数を使って開始されている場合でも、タスク関数を1回だけ実行します。

function once() { arguments.callee.task.cancel(); }