タイムアウト手続き

タイムアウトとは、時間を指定してポーリングを設定する手段です。タイムアウトによって通常のイベントの 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 マニュアルを参照してください。

関連項目: