control.scheduler
- スケジューラ ¶スケジューラは、予定された時刻にタスクを走らせるデバイスです。
各スケジューラは一つ以上のタスクを管理します。各タスクには、それがいつ走るかを 指定する時刻が付随します。タスクは一回だけ走らせることも、 定期的に走らせることもできます。
ポータブルなコードでは、このモジュールの上に構築された
SRFI-120を使うこともできます(srfi.120
- タイマーAPI参照)。
{control.scheduler
}
タスクを予定された時刻に走らせるデバイスです。
各スケジューラインスタンスは独自のスレッドを持ち、
タスクとそれをいつ走らせるかのリストを管理しています。
タスクはscheduler-schedule!
で登録できます。
タスクがエラーを投げた場合、error-handler
スロットに格納された手続きが、
コンディションオブジェクトを引数として呼ばれます。
error-handler
が設定されていない場合、あるいはerror-handler
が
エラーを投げた場合はスケジューラが停止します。
投げられたコンディションはスケジューラの中に保存され、
scheduler-terminate!
で取り出せます。
<scheduler>
: error-handler ¶このスロットは:error-handler
キーワード引数で初期化できます。
値は#f
もしくは引数をひとつ取る手続きでなければなりません。
手続きの場合、それはタスクがエラーを投げた時に、
投げられたコンディションオブジェクトを引数として呼び出されます。
手続きの戻り値は捨てられます。
{control.scheduler
}
schedulerが動作中なら#t
を、そうでなければ#f
を返します。
{control.scheduler
}
thunkを走らせる新たなタスクをschedulerに加えます。
タスクは一回だけ走らせることも、定期的に走らせることもできます。
when引数が、最初にタスクを走らせるタイミングを指定します。 次のいずれかの値が使えます。
type-utc
かtime-tai
型の<time>
オブジェクト絶対的な時刻を指定します。
time-duration
型の<time>
オブジェクトこの手続きを呼んだ時点からの相対的な時刻を指定します。
この手続きを呼んだ時点からの秒数を指定します。
省略可能なinterval引数は、#f
、実数、もしくはtime-duration
型の
<time>
オブジェクトです。#f
または0
の場合、
タスクは一回だけ実行され、繰りかえされません。
そうでなければ、タスクは指定の時間間隔で繰り返し実行されます。
実数の場合の単位は秒です。
手続きは、タスクを指定する整数を返します。この値は後でタスクをリスケジュールしたり キャンセルするのに使えます。
{control.scheduler
}
task-idで指定されるタスクのスケジュールを変更します。
whenおよびintervalの意味はscheduler-schedule!
と同じです。
whenとinterval引数は、scheduler-schedule!
と同じものの他、
シンボルunchanged
も許されます。unchanged
が渡された場合は
その引数に関して以前の設定が引き継がれます。intervalを省略することは
タスクを繰り返さないという指定になることに注意してください。
次にタスクが実行される時刻を変更したいが、繰り返しの周期はそのままにしておきたい、
という場合はintervalにunchanged
を渡してください。
task-idに該当するタスクがなければエラーが投げられます。
{control.scheduler
}
task-idで指定されるタスクをスケジューラから取り除きます。
実際にタスクが取り除かれたら#t
を、
該当するタスクが無かった場合は#f
を返します。
{control.scheduler
}
スケジューラがtask-idで指定されるタスクを持っていれば#t
を、
そうでなければ#f
を返します。
繰り返さないタスクは一度実行されたらスケジューラから取り除かれることに注意してください。
{control.scheduler
}
スケジューラを停止します。スケジューラのキューに残っているタスクはもう実行されず、
また新しいタスクを追加することもできなくなります。
一度停止したスケジューラを再起動することはできません。
タスクがこれまで例外をあげたことがないか、スケジューラのerror-handler
で
例外が全て処理済みであった場合、この手続きはスケジューラが停止した後で
#t
を返します。
タスクが例外を上げていてスケジューラのerror-handler
で処理されて
いなかった場合、この手続きの振る舞いはon-error引数で決まります。
可能な値は次のいずれかです。
:reraise
処理されなかった例外が、scheduler-terminate!
から改めて投げられます。
これがデフォルトの振る舞いです。
:return
処理されなかった例外がscheduler-terminate!
の戻り値として返されます。