タイムアウト・トリガーの使用

タイムアウト・トリガーの構文は tm(<expression>) です。ここで <expression> は、時間単位の数値です。

このタスクについて

デフォルトの時間単位はミリ秒です。時間単位はオペレーティング・システム・アダプターのティック・タイマーの実装に基づいて設定されます。タイムアウトは、発生状態 (s1) に入ったときにスケジュールされます。タイムアウトが消費される前に発生状態が終了すると、タイムアウトはキャンセルされます。

タイムアウト・トリガー

タイムアウト機構 (tm()) を使用できるのは、サービス品質 (QOS) の精度要件が以下のタイムアウト精度に一致する場合です。タイムアウトは発生すると、リアクティブ・インスタンスに関係するイベント・キューに挿入されます。タイムアウトがいつ消費されるかは、実際のシステム状態に依存します。タイムアウトの発生は、以下の 3 つの要因に依存します。

手順

  1. タイムアウト・リクエスト・タイム (T)
  2. チック・タイマーの分解能 (R)

    分解能は、期限切れのタイムアウトがあるかどうかを、システムがチェックする頻度を指定します。

  3. タイムアウト遅延 (L)

    一部のオペレーティング・システム・アダプターでは、ティック・タイマーの実装が同期的 (sleep(interval) コールを使用) です。つまり、この実装では、 遅延時間 (期限切れタイムアウトの処理に使った時間) が組み込まれていることになります。この遅延時間は、 タイムアウト時間が非常に長い (複数のタイマー・ティック) 場合には、大きな影響を及ぼします。

    以下の式は、タイムアウトがいつ期限切れになるかを決定します。

          [(T+L)-R,(T+L)+R]
    注: 同じステートチャート内でトリガーされた操作とイベント (タイムアウトも含む) を使用しており、イベント消費スレッド以外のスレッドで実行しているオブジェクトから、トリガーされた操作を呼び出せる場合は、競合になる可能性があります。競合を防止するには、トリガーされた操作をガードします。これによって、タイムアウトとの競合も防止します。

フィードバック