Schedule()関数を使うと、指定した秒数後にスクリプトを実行できます。
Schedule( 15, Print( "こんにちは" ) );
図8.6 JMPスケジューラ
「スケジューラ」ウィンドウには、次のイベントまでの時間が表示されます。また、スケジュールを再開するためのボタン([実行])や停止するためのボタン([停止])があります。このウィンドウのポップアップメニューには[スケジュールの表示]がコマンドあり、 現在のスケジュール内容をログに出力します。たとえば、上の「こんにちは」の例の実行中に何度かスケジュールを確認すると、次のような表示が見られます。
スケジュール時間 11.55000000000018 :Print("こんにちは")
スケジュール時間 4.716666666666697 :Print("こんにちは")
スケジュール時間 3.083333333333485 :Print("こんにちは")
このスクリプトは、格納された式を参照する名前でもかまいません。たとえば、次のようにそのスクリプト自体を呼び出すスクリプトを実行してみましょう。
quickieScript = Expr(
Show( "やあ、どうも" );
Schedule( 15, quickieScript );
);
quickieScript;
このスクリプトは、15秒後にログウィンドウに文字列「やあ、どうも」を表示し、そのさらに15秒後に同じスクリプトが実行されるように再スケジュールします。これは[停止]ボタンがクリックされるまで続きます。
また、プロダクションの設定として、次のようなスケジュールを設定することもあるでしょう。
FifteenMinuteCheck = Expr(
Show( "データのチェック" );
Open( "my file", options... );
distribution( Column( column1 ), capability( spec limits ) );
Schedule( 15 * 60, FifteenMinuteCheck );
);
FifteenMinuteCheck;
Schedule()はイベントキューを開始します。イベントがキューに置かれると、スクリプト内の次のステートメントの実行に移ります。たとえば、次の例のような結果になることもあります。
Schedule( 3, Print( "いち" ) );
Print( "に" );
"に"
"いち"
イベントが終了するまで、それ以降のスクリプトが実行されないように待機させる方法の1つに、Wait( )を使って適当な停止時間を設定する方法があります。別の方法としては、以降の処理をスケジュールのキューに入れます。Schedule()では、たくさんのイベントを連続的にキューに入れられるようになっています。複数のイベントをスケジュールに設定した場合、各イベントは、個別に呼び出されます。各イベントの実行時間はすべて、「今」から(または、[実行]がクリックされてから)の時間で指定してください。たとえば、以下の複数のイベントは、12秒間ではなく5秒間ですべて終了します。
Schedule( 3, Print( "こんにちは" ) );
Schedule( 4, Print( "、世界のみなさん" ) );
Schedule( 5, Print( "--さようなら" ) );
スケジュールキュー上のイベントをすべてキャンセルするには Clear Scheduleを使います。
scheduler[1] << Clear Schedule( );
メモ:Scheduleを使ってマルチスレッドで動作させることはできません。
メッセージ | 構文 | 説明 |
---|---|---|
スケジュール | sc=Schedule(n, script) | n秒後に指定のスクリプト(script)を実行するというイベントをキューに入れる。 |
スケジュールのクリア | sc<<Clear Schedule() | スケジュールのキューにあるイベントを、すべて停止する。 |