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
を返します。