アプリケーションにタイマーを管理するモジュールがあります。このクラスには、基本的に3つの機能があります。
ACE_Reactorのインスタンスは、タイマーを管理するためにモジュールによって内部的に使用されます。
- タイマーのスケジュール-ACE_Reactor::schedule_timer()を呼び出します。引数の1つは、タイマーの期限切れ時に呼び出されるコールバックです。
- タイマーのキャンセル-ACE_Reactor::cancel_timer()を呼び出します
実行のプライベートタイマーでreactorが実行されるため、schedule/cancelとtimeoutcallbackは異なるスレッドで実行されます。
ACE_Reactor :: schedule_timer()は、ヒープ割り当て構造(arg引数)を受け取ります。
この構造は、後でタイマーをキャンセルするとき、またはタイムアウトハンドラーが呼び出されるときに削除されます。ただし、キャンセルハンドラとタイムアウトハンドラは異なるスレッドで実行されるため、構造が2回削除される場合があるようです。
タイムアウトハンドラーが呼び出されたときにタイマーがキャンセルされるようにするのはreactorの責任ではありませんか?