For Development HEAD DRAFTSearch (procedure/syntax/module):

12.11 control.scheduler - スケジューラ

Module: control.scheduler

スケジューラは、予定された時刻にタスクを走らせるデバイスです。

各スケジューラは一つ以上のタスクを管理します。各タスクには、それがいつ走るかを 指定する時刻が付随します。タスクは一回だけ走らせることも、 定期的に走らせることもできます。

ポータブルなコードでは、このモジュールの上に構築された SRFI-120を使うこともできます(srfi.120 - タイマーAPI参照)。

Class: <scheduler>

{control.scheduler} タスクを予定された時刻に走らせるデバイスです。 各スケジューラインスタンスは独自のスレッドを持ち、 タスクとそれをいつ走らせるかのリストを管理しています。 タスクはscheduler-schedule!で登録できます。

タスクがエラーを投げた場合、error-handlerスロットに格納された手続きが、 コンディションオブジェクトを引数として呼ばれます。 error-handlerが設定されていない場合、あるいはerror-handlerが エラーを投げた場合はスケジューラが停止します。 投げられたコンディションはスケジューラの中に保存され、 scheduler-terminate!で取り出せます。

Instance Variable of <scheduler>: error-handler

このスロットは:error-handlerキーワード引数で初期化できます。 値は#fもしくは引数をひとつ取る手続きでなければなりません。 手続きの場合、それはタスクがエラーを投げた時に、 投げられたコンディションオブジェクトを引数として呼び出されます。 手続きの戻り値は捨てられます。

Function: scheduler-running? scheduler

{control.scheduler} schedulerが動作中なら#tを、そうでなければ#fを返します。

Function: scheduler-schedule! scheduler thunk when :optional interval

{control.scheduler} thunkを走らせる新たなタスクをschedulerに加えます。 タスクは一回だけ走らせることも、定期的に走らせることもできます。

when引数が、最初にタスクを走らせるタイミングを指定します。 次のいずれかの値が使えます。

type-utctime-tai型の<time>オブジェクト

絶対的な時刻を指定します。

time-duration型の<time>オブジェクト

この手続きを呼んだ時点からの相対的な時刻を指定します。

実数

この手続きを呼んだ時点からの秒数を指定します。

省略可能なinterval引数は、#f、実数、もしくはtime-duration型の <time>オブジェクトです。#fまたは0の場合、 タスクは一回だけ実行され、繰りかえされません。 そうでなければ、タスクは指定の時間間隔で繰り返し実行されます。 実数の場合の単位は秒です。

手続きは、タスクを指定する整数を返します。この値は後でタスクをリスケジュールしたり キャンセルするのに使えます。

Function: scheduler-reschedule! scheduler task-id when :optional interval

{control.scheduler} task-idで指定されるタスクのスケジュールを変更します。 whenおよびintervalの意味はscheduler-schedule!と同じです。

wheninterval引数は、scheduler-schedule!と同じものの他、 シンボルunchangedも許されます。unchangedが渡された場合は その引数に関して以前の設定が引き継がれます。intervalを省略することは タスクを繰り返さないという指定になることに注意してください。 次にタスクが実行される時刻を変更したいが、繰り返しの周期はそのままにしておきたい、 という場合はintervalunchangedを渡してください。

task-idに該当するタスクがなければエラーが投げられます。

Function: scheduler-remove! scheduler task-id

{control.scheduler} task-idで指定されるタスクをスケジューラから取り除きます。 実際にタスクが取り除かれたら#tを、 該当するタスクが無かった場合は#fを返します。

Function: scheduler-exists? scheduler task-id

{control.scheduler} スケジューラがtask-idで指定されるタスクを持っていれば#tを、 そうでなければ#fを返します。 繰り返さないタスクは一度実行されたらスケジューラから取り除かれることに注意してください。

Function: scheduler-terminate! scheduler :key on-error

{control.scheduler} スケジューラを停止します。スケジューラのキューに残っているタスクはもう実行されず、 また新しいタスクを追加することもできなくなります。 一度停止したスケジューラを再起動することはできません。

タスクがこれまで例外をあげたことがないか、スケジューラのerror-handlerで 例外が全て処理済みであった場合、この手続きはスケジューラが停止した後で #tを返します。

タスクが例外を上げていてスケジューラのerror-handlerで処理されて いなかった場合、この手続きの振る舞いはon-error引数で決まります。 可能な値は次のいずれかです。

:reraise

処理されなかった例外が、scheduler-terminate!から改めて投げられます。 これがデフォルトの振る舞いです。

:return

処理されなかった例外がscheduler-terminate!の戻り値として返されます。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT