Next: , Up: Threads   [Contents][Index]


37.1 基本的なスレッド関数

スレッドを作成したり待機することができます。スレッドを直接exitすることはできませんがカンレントスレッドは暗黙にexitでき、他のスレッドはシグナルを受け取ることができます。

Function: make-thread function &optional name

functionを呼び出す新たなスレッドの実行を作成する。functionのリターン時にスレッドはexitする。

新たなスレッドは効力をもつローカル変数のバインディングが何もない状態で作成される。新たなスレッドのカレントバッファーはカレントスレッドから継承される。

nameでスレッドに名前を与えることができる。これはデバッグと情報的な用途だけに使用される名前であり、Emacsにとって意味はない。nameを与える場合には文字列でなければならない。

この関数は新たなスレッドをリターンする。

Function: threadp object

この関数はobjectがEmacsスレッドを表すならt、それ以外はnilをリターンする。

Function: thread-join thread

threadがexitするかカレントスレッドがシグナルされるまでブロックする。これはthread関数の結果をリターンする。threadがexit済みなら即座にリターンする。

Function: thread-signal thread error-symbol data

signal (Signaling Errorsを参照)と同様だがシグナルはスレッドthreadに送信される。threadがカレントスレッドなら、即座にsignalを呼び出す。それ以外ならthreadがカレントになり次第、シグナルを受信する。mutex-lockcondition-waitthread-joinの呼び出しによりthreadがブロックされていたらthread-signalがロックを解除する。

threadがメインスレッドならシグナルは伝播されない。かわりにメインスレッド内のメッセージとして表れる。

Function: thread-yield

実行可能な次のスレッドに実行を譲り渡す。

Function: thread-name thread

make-threadで指定されたthreadの名前をリターンする。

Function: thread-live-p thread

threadが生きていればt、それ以外はnilをリターンする。スレッドは自身の関数がまだ実行中なら生きている。

Function: thread--blocker thread

threadが待機中のオブジェクトをリターンする。これは主にデバッグを糸した関数であり、それを示すために“2重ハイフン”の名前を付与してある。

threadthread-join内でブロックされていたら待機対象のスレッドをリターンする。

threadmutex-lock内でブロックされていたらミューテックスをリターンする。

threadcondition-wait内でブロックされていたら条件変数をリターンする。

それ以外ならnilをリターンする。

Function: current-thread

カレントスレッドをリターンする。

Function: all-threads

すべての生きたスレッドオブジェクトのリストをリターンする。呼び出しそれぞれにたいして新たなリストをリターンする。

Variable: main-thread

この変数はEmacs実行中のメインスレッド、スレッドサポートなしでEmacsコンパイル時にはnilを保持する。

スレッドが実行したコードがハンドルされないエラーをシグナルすると、そのスレッドはexitします。それ以外のスレッドは以下の関数を使用してスレッドのexitを誘発したエラーフォームにアクセスできます。

Function: thread-last-error &optional cleanup

この関数はエラーによりスレッドがexitした際に記録された最後のエラーフォームをリターンする。異常終了(abnormal exit)した各スレッドが、以前にスレッドエラーで格納されたフォームを新たな値に上書きするので、アクセスできるのは最後のフォームのみ。cleanupが非nilなら格納されたフォームをnilにリセットする。