Gforth のメッセージ・キューはアクター・モデルのバリエーションです。
イベントは xt です。 送信タスクは受信タスクにイベントを実行するようにお願いし、 受信タスクは準備ができたらそのメッセージ・キューからイベントを 1 つ実行します。 単回実行クロージャ(Execute-once closures)は、 パラメーターを渡すイベントに使用できます。
send-event
( xt task – ) gforth-experimental “send-event”
タスク IPC: xt を task に送信します。 task で xt が execute されます。 使い捨てクロージャ(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)されます。