スレッドの作成や待機が可能です。スレッドを直接終了させることはできませんが、現在のスレッドを暗黙的に終了させたり、他のスレッドにシグナルを送ったりすることはできます。
functionを呼び出す新しい実行スレッドを作成する。functionが返ると、そのスレッドは終了する。
新しいスレッドは、ローカル変数の束縛が適用されていない状態で生成されます。新しいスレッドの現在のバッファは、現在のスレッドから継承されます。
name を指定すると、スレッドに名前を付けることができます。この名前はデバッグや情報提供目的のみに使用され、Emacs にとっては意味を持ちません。name を指定する場合は、文字列である必要があります。
buffer-disposition
は、スレッドの現在のバッファが破棄されようとしている場合に何が起こるかを示します。値が t
の場合、バッファの破棄は許可されません。nil(デフォルト)を含むそれ以外の値は、バッファが破棄され、スレッドに別の現在のバッファが割り当てられ、エラー
thread-buffer-killed が通知されることを意味します。ただし、値がシンボル
silently の場合は、エラーは通知されません。
この関数は新しいスレッドを返します。
スレッドが作成された後は、関数 thread-buffer-disposition および
thread-set-buffer-disposition
を使用して、そのバッファ処理を確認または変更できます。
この関数は、object が Emacs スレッドを表す場合は t を、そうでない場合は nil を返します。
thread が終了するか、現在のスレッドにシグナルが送られるまでブロックします。thread 関数の結果を返します。thread が既に終了している場合は、直ちに戻ります。
signal と同様(エラーの通知方法 を参照)ですが、シグナルはスレッド thread で送出されます。thread
が現在のスレッドである場合、これは直ちに signal を呼び出します。そうでない場合は、thread が現在のスレッドになった時点でシグナルを受信します。thread が mutex-lock、condition-wait、または thread-join
の呼び出しによってブロックされていた場合、thread-signal がそれを解除します。
threadがメインスレッドの場合、シグナルはそこでは伝播されません。代わりに、メインスレッドでメッセージとして表示されます。
実行を次の実行可能スレッドに譲る。
make-thread に指定された thread
の名前を返します。
thread が生存していれば t を、そうでなければ
nil を返します。スレッドは、その関数が実行されている限り生存しているものとします。
thread が待機しているオブジェクトを返します。この関数は主にデバッグ目的で用意されており、それを示すために「ダブルハイフン」という名称が付けられています。
thread が thread-join
でブロックされている場合、待機対象のスレッドを返します。
thread が mutex-lock
でブロックされている場合、ミューテックスを返します。
thread が condition-wait
でブロックされている場合、条件変数を返します。
それ以外の場合は、nil を返します。
現在のスレッドを返す。
すべてのライブスレッドオブジェクトのリストを返します。呼び出されるたびに新しいリストが返されます。
この変数には、Emacsが動作しているメインスレッドが格納されます。Emacsがスレッドサポートなしでコンパイルされている場合は nil となります。
スレッドで実行されているコードが未処理のエラーを通知すると、そのスレッドは終了します。他のスレッドは、以下の関数を使用して、スレッドを終了させたエラーフォームにアクセスできます。
この関数は、スレッドがエラーにより終了した際に記録された直近のエラーフォームを返します。異常終了した各スレッドは、直前のスレッドのエラーフォームに格納されていた内容を新しい値で上書きするため、アクセスできるのは直近のもののみとなります。cleanup が nil 以外の場合、格納されているフォームは
nil にリセットされます。