Previous: , Up: Pthreads   [Contents][Index]


6.27.1.5 Message queues

Gforth のメッセージ・キューはアクター・モデルのバリエーションです。

イベントは xt です。 送信タスクは受信タスクにイベントを実行するようにお願いし、 受信タスクは準備ができたらそのメッセージ・キューからイベントを 1 つ実行します。 単一実行クロージャ(Execute-once closures)は、 パラメータを渡すイベントに使用できます。

send-event ( xt task –  ) gforth-experimental “send-event”

タスク IPC: xttask に送信します。 taskxtexecute されます。 使い捨てクロージャ(one-shot closure)を使用して、 xt でパラメータを渡します。

複数のタスクが 1 つのタスクにイベントを送信する場合、 イベントは任意の順序で到着する可能性があります。 イベントを受信するには、 受信タスクに以下のいずれかのワードを使います:

?events ( ) gforth-experimental “question-events”

現在のタスクのメッセージ・キュー内のすべてのイベント・シーケンスを一度に 1 つずつ実行します。

event-loop ( ) gforth-experimental “event-loop”

イベント・シーケンスを待ち、 イベント・シーケンスが到着したら実行します。 キューにイベント・シーケンスがない場合は待機に戻ります。 このワードは二度と制御を戻しません(This word never returns.)。

event-loop の代わりに、 タスクが stop 状態になると、 イベントを受信する準備も整い、 そして、 イベントを受信するとタスクが起動(wake)されます。