ToolTalk ユーザーズガイド

1 つの ptype のハンドラを 2 つ以上実行できますか

実行できます。ただし、ToolTalk サービスには負荷分散の概念がないため、ToolTalk はいくつかのハンドラから 1 つだけ選択し、一致するものであれば、その他のメッセージもそのハンドラだけに配信します。メッセージをその他のハンドラにも配信させるには、次のような方法があります。

  1. tt_message_reject を使用する。

    メッセージを受信してもビジーなのでそのメッセージを処理したくないプロセスは、メッセージを拒否できます。この場合、ToolTalk サービスは使用可能な次のハンドラを探します。(登録されているハンドラがすべて拒否した場合は、処置オプションが適用されます。)

    この方法では、tt_fd が有効になったら tt_message_receive を呼び出すというイベントループを、プロセスが実行中でなければなりません。ただし、プロセスが複雑な計算ループを実行していると、この方法ではうまくいきません。

  2. ビジーになるようなメッセージの場合は、そのパターンを登録解除する。次に例を示します。

       m = tt_message_receive();
       if (m is the message that causes us to go busy) {
            tt_pattern_unregister(p);
       }

    ToolTalk サービスは、パターンが登録されていないと、一致するメッセージをプロセスに渡しません。プロセスでもう一度メッセージを受信したい場合は、パターンを再登録してください。


    注 –

    この方法を使用すると、競争条件が生じます。たとえば、tt_message_receivett_pattern_unregister 呼び出しの間に次のメッセージが送信され、このプロセスに渡される可能性があります。


  3. 方法 1 と方法 2 を組み合わせる。

    方法 1 と方法 2 を組み合わせて、次のようにすることもできます。

    get the message
       unregister the pattern
       loop, calling tt_message_receive until it returns 0; reject
       all the returned messages
       handle the message
       re-register the pattern
       repeat


    注 –

    この方法では、プロセスで登録するパターンは 1 つであることが前提です。