For Gauche 0.9.5


Next: , Previous: , Up: ライブラリモジュール - ユーティリティ   [Contents][Index]

12.4 control.job - 制御モジュールのための汎用ジョブ記述子

Module: control.job

このモジュールは、制御フローサブシステム(control.*モジュール) の中で使う軽量な構造である job レコード型を提供します。 現在のところ、これを使っているのはcontrol.thread-poolだけですが、 他にもいくつかのモジュールがjobレコードを使う予定です。

control.*モジュールは、アプリケーションがジョブを追跡できるように jobレコードを返すことができます。ただし、 これは、アプリケーションが普通に使用するための ものではありません。アプリケーションが新しいジョブを 作成したり、その内容を変更したりすることは想定されていません; できるのは、そのジョブの属性について問い合わせることだけです。

この節では、アプリケーションが知るべき手続きだけを説明します。 制御サブシステムのためのインタフェースは未だ流動的であり、 さらなるサブシステムの開発が進むにつれて、変更されるかもしれません。

異なる制御フローサブシステムは、ジョブ構造の使い方が異なる かもしれません。この節では、共通する属性のみを説明します。 返されたジョブオブジェクトの扱い方については、個々の制御フロー モジュールを調べて下さい。

Record type: job

ジョブを表すレコード型です。アプリケーションはこれを、不透明(opaque)な 構造として扱うべきです。

Function: job? obj

objがジョブレコードだったら#tを、そうでなければ#fを返します。

Function: job-status job

ジョブの状態を返します。ジョブの状態は以下のいずれかになります。

#f

作成したてか、孤児のジョブです。通常、アプリケーションがジョブの この状態に遭遇することはありません。

acknowledged

ジョブは制御フローライブラリによって認識されていますが、まだ 実行されてはいません。

running

ジョブは実行中です。

done

ジョブは完了しています。アプリケーションはその処理の結果を、 job-resultを使って受け取ることができます。

error

ジョブはエラーで終了しています。アプリケーションはエラーの原因となった コンディションを、job-resultを使って受け取ることができます。

killed

ジョブは外部から殺されています。アプリケーションは殺された理由を、 job-resultを使って受け取ることができます。 どのような理由でジョブが殺されるかは制御フローサブシステムによります。

Function: job-result job

与えられたジョブがdone状態だったら、そのジョブの処理結果を返します。 与えられたジョブがerror状態だったら、そのエラーを説明する コンディションオブジェクトを返します。そのジョブがkilled状態だったら、 殺された理由を説明するオブジェクトを返します。このオブジェクトの詳細は、 実際の制御フローライブラリに依存することになります。これら以外の状態の ジョブに対してjob-resultを読んだ場合、何が返るかはわかりません; その結果を当てにすることはできません。

Function: job-wait job :optional timeout timeout-val

与えられたジョブがdoneerrorもしくはkilled 状態になるまで、呼び出したスレッドの実行をサスペンドします。 ジョブがすでにこれらの状態であった時は、ただちに制御を戻します。 ジョブの状態が返ります。

timeoutが与えられ、それが#fではない場合は、 タイムアウトのスペックとして有効なもの(時間の絶対値を表す <time>か、現時点からの相対的な秒数を表す実数)で なければなりません。timeoutの意味は、mutex-unlock! (see 同期プリミティブ)のそれと同じです。 タイムアウトすると、そのジョブの状態が何であれ、 job-waitは引数timeout-valとして指定された 値を返します。デフォルト値は#fです。

そのジョブを作成する制御フローサブシステムによっては、 待ち受けできないかもしれません。それぞれのサブシステムの ドキュメントを調べて詳細を確認してください。

Function: job-acknowledge-time job
Function: job-start-time job
Function: job-finish-time job

制御フローサブシステムがジョブのタイムスタンプを記録する場合、 これらの手続きは、そのジョブがサブシステムによって認識された時刻、 開始された時刻、(正常に、あるいはエラーや殺されるなど異常に) 終了した時刻を(<time>オブジェクトとして)返します。 ジョブがそうした状態に達していない場合は#fを返します。

そのサブシステムがタイムスタンプを記録しない場合、これらの 手続きは常に#fを返します。


Next: , Previous: , Up: ライブラリモジュール - ユーティリティ   [Contents][Index]