Next: control.plumbing - ポートの配管, Previous: control.future - Future, Up: ライブラリモジュール - ユーティリティ [Contents][Index]
control.job - 制御モジュールのための汎用ジョブ記述子このモジュールは、制御フローサブシステム(control.*モジュール)
の中で使う軽量な構造である job レコード型を提供します。
現在のところ、これを使っているのはcontrol.thread-poolだけですが、
他にもいくつかのモジュールがjobレコードを使う予定です。
control.*モジュールは、アプリケーションがジョブを追跡できるように
jobレコードを返すことができます。ただし、
これは、アプリケーションが普通に使用するための
ものではありません。アプリケーションが新しいジョブを
作成したり、その内容を変更したりすることは想定されていません;
できるのは、そのジョブの属性について問い合わせることだけです。
この節では、アプリケーションが知るべき手続きだけを説明します。 制御サブシステムのためのインタフェースは未だ流動的であり、 さらなるサブシステムの開発が進むにつれて、変更されるかもしれません。
異なる制御フローサブシステムは、ジョブ構造の使い方が異なる かもしれません。この節では、共通する属性のみを説明します。 返されたジョブオブジェクトの扱い方については、個々の制御フロー モジュールを調べて下さい。
{control.job} ジョブを表すレコード型です。アプリケーションはこれを、不透明(opaque)な 構造として扱うべきです。
{control.job}
objがジョブレコードだったら#tを、そうでなければ#fを返します。
{control.job} ジョブの状態を返します。ジョブの状態は以下のいずれかになります。
#f作成したてか、孤児のジョブです。通常、アプリケーションがジョブの この状態に遭遇することはありません。
acknowledgedジョブは制御フローライブラリによって認識されていますが、まだ 実行されてはいません。
runningジョブは実行中です。
doneジョブは完了しています。アプリケーションはその処理の結果を、
job-resultを使って受け取ることができます。
errorジョブはエラーで終了しています。アプリケーションはエラーの原因となった
コンディションを、job-resultを使って受け取ることができます。
killedジョブは外部から殺されています。アプリケーションは殺された理由を、
job-resultを使って受け取ることができます。
どのような理由でジョブが殺されるかは制御フローサブシステムによります。
{control.job}
与えられたジョブがdone状態だったら、そのジョブの処理結果を返します。
与えられたジョブがerror状態だったら、そのエラーを説明する
コンディションオブジェクトを返します。そのジョブがkilled状態だったら、
殺された理由を説明するオブジェクトを返します。このオブジェクトの詳細は、
実際の制御フローライブラリに依存することになります。これら以外の状態の
ジョブに対してjob-resultを読んだ場合、何が返るかはわかりません;
その結果を当てにすることはできません。
{control.job}
与えられたジョブがdone、errorもしくはkilled
状態になるまで、呼び出したスレッドの実行をサスペンドします。
ジョブがすでにこれらの状態であった時は、ただちに制御を戻します。
ジョブの状態が返ります。
timeoutが与えられ、それが#fではない場合は、
タイムアウトのスペックとして有効なもの(時間の絶対値を表す
<time>か、現時点からの相対的な秒数を表す実数)で
なければなりません。timeoutの意味は、mutex-unlock!
(see 同期プリミティブ)のそれと同じです。
タイムアウトすると、そのジョブの状態が何であれ、
job-waitは引数timeout-valとして指定された
値を返します。デフォルト値は#fです。
そのジョブを作成する制御フローサブシステムによっては、 待ち受けできないかもしれません。それぞれのサブシステムの ドキュメントを調べて詳細を確認してください。
{control.job}
制御フローサブシステムがジョブのタイムスタンプを記録する場合、
これらの手続きは、そのジョブがサブシステムによって認識された時刻、
開始された時刻、(正常に、あるいはエラーや殺されるなど異常に)
終了した時刻を(<time>オブジェクトとして)返します。
ジョブがそうした状態に達していない場合は#fを返します。
そのサブシステムがタイムスタンプを記録しない場合、これらの
手続きは常に#fを返します。
Next: control.plumbing - ポートの配管, Previous: control.future - Future, Up: ライブラリモジュール - ユーティリティ [Contents][Index]