Rich UI ジョブ・スケジューラー
Rich UI ジョブ・スケジューラーは、指定したミリ秒の経過後に、 カスタマイズした関数を呼び出すことができるタイマーです。複数のジョブを スケジュールに入れることができ、実行時の状態に応じてそれらを取り消すことが できます。
ワークスペースで、次の例を試すことができます。
import com.ibm.egl.rui.widgets.Button;
import egl.javascript.Job;
handler MyHandler type RUIhandler { initialUI = [stopButton],
onConstructionFunction = initialization }
stopButton Button{text="Stop!", onclick ::= pleaseStop};
doThis Job{runFunction = myRunFunction};
function initialization()
doThis.repeat(1000);
end
function myRunFunction()
sysLib.writeStdOut(currentTime());
end
function pleaseStop(e event in)
doThis.cancel();
end
end
この機能を使用するには、次の import ステートメントを入力する必要があります。
import egl.javascript.Job;
Widget 型で有効な Ctrl-Shift-O メカニズムを使用してステートメントを 追加することはできません。
次の 2 つの定義により、この関係が明確化
されます。
- 実行関数は、ジョブがスケジュールに入れられるときに呼び出される関数です。 この例での実行関数は myRunFunction です。
- 現行関数は、タイマーが実行されている間、実行される関数です。
このジョブ・スケジューラーは、Job という EGL 外部型
に基づく変数です。変数の宣言時に、以下のプロパティーを設定できます。
- name
- ジョブ・スケジューラーを識別するために EGL デバッガー によって使用されます。このプロパティーを省略した 場合、name の値は変数名になります。
- runFunction
- 実行関数を識別します。実行関数は、パラメーターも 戻り値も持ちません。
ジョブ・スケジューラーを使用して
以下の関数を呼び出すことができます。
- schedule (int milliseconds)
- 指定したミリ秒数のタイマーを即時に設定し、その後に実行関数を呼び出します。この呼び出しが行われるもっとも早い時期は、タイマーが経過するか、現行関数が 終了するかのいずれか後のほうです。milliseconds を省略した 場合に呼び出しが行われるもっとも早い時期は、現行関数が終了した直後です。
- repeat (int milliseconds)
- 指定したミリ秒数のタイマーを即時に設定し、実行関数を繰り返し呼び出します。
タイマーは、 実行関数が開始されるたびにリセットされます。最初の呼び出しを含む実行関数の各呼び出しの規則は、次のとおりです。つまり、呼び出しが行われるもっとも早い時期は、タイマーが経過するか、現行関数が 終了するかのいずれか後のほうです。
- cancel()
- 後で起動されたジョブの起動を取り消します。
実行関数の呼び出しにより、別の関数の実行が中断されることはありません。 例えば、ジョブがスケジュールに入れられている時間と実行関数が呼び出される時間 の間の時間がある場合に、ユーザーがボタンをクリックしてイベント・ハンドラーを スケジュールに入れる可能性があります。 この場合、ジョブ関数の呼び出しは、少なくともイベント・ハンドラーが独自の下位関数 (ある場合) を呼び出して終了されるまで待機されます。
JOB 型の複数の変数を作成でき、この方法で、複数のジョブをスケジュールに入れる ことができ、さらに同じ実行関数を呼び出すこともできます。いずれの場合も、 特定の時刻に実行される関数は 1 つのみであり、その関数が完了まで実行されます。
同じ変数を使用してジョブのスケジュールを変更した場合は、その変数の前回の使用が 取り消されます。