タイムアウトとは、時間を指定してポーリングを設定する手段です。タイムアウトによって通常のイベントの
X 処理が妨げられることはありません。タイムアウト手続きとは、将来のある時点で
X によって呼び出される手続きです。タイムアウト手続きは、次の手続きによってツールキットに登録されます。
XtIntervalId XtAppAddTimeOut(XtAppContext app_context,
unsigned long interval,
XtTimerCallbackProc timer_handler,
XtPointer client_data)
これによって返される不透明ハンドルを使用すれば、後で必要が生じたときにタイムアウトを削除できます。間隔
(2 番目の引数) は、ミリ秒を表すために使用されます。このような手続きは次の書式になります。
void MyTimerHandler(XtPointer client_data,
XtIntervalId *id)
タイムアウト手続きの削除
タイムアウト手続きを削除するには、次の関数を使用します。
XtRemoveTimeOut(XtIntervalId id)
注
タイムアウト手続きはポーリングを行わず、
1 回だけ呼び出されます。ポーリングする必要がある場合には、XtAppAddTimeOut を再び内部的に呼び出して、同じ関数を後で呼び出せるようにしてください。タイムアウトは合成イベントによって実装されます。このイベントは、X サーバーによってイベント待ち行列に送られます。クロックは、クライアント領域ではなくサーバー領域でスタートします。したがって、伝播遅延が発生することになるため、タイムアウト手続きを原子時計として使用することはできません。
クロック分解能を向上させるためのヒント
: 自分の手続きを (経過時間ではなく) 絶対時間の一定間隔で実行したい場合には、(固定値ではなく) 現在の時間をベースにして次の実行のための間隔を計算してください。これにより、ずれがあっても修正されます。警告
タイマーが止まった後でタイムアウト手続きを削除しようとすると、不安定な状態になります。
X
タイムアウト手続きの詳細については、X マニュアルを参照してください。 関連項目: