私は経験豊富なC++プログラマーではありません。だから私はJavaがC++で持っているのと同じようにtimerとtimertaskを実装する方法を知りたいだけです。timer_createのmanページにある例を試しtimer_create
ましたが、要件どおりに機能していません。特定の期間が経過した後、イベントが発生し、特定の条件が満たされた場合はタイマーをキャンセルする必要があります。
どんな助けでも大歓迎です。ありがとう、Yuvi。
これは、本質的に並行処理、または少なくとも非同期処理を求めているため、一般的に非常に難しい質問です。
最も単純なシングルスレッドのソリューションは、Posix の .xml などを使用することですalarm(2)
。これにより、指定された時間後にシグナルがプロセスに送信されます。シグナル ハンドラを登録する必要がありますが (例: を使用signal(2)
)、すべての制限を受けます (例: ハンドラ内で非同期セーフ関数のみを呼び出さなければならないなど)。
2 番目のシングルスレッド オプションは、select
-style (またはepoll
-style) I/O ループを使用し、カーネル タイマー ファイル記述子を使用することです。ただし、これはごく最近の Linux 機能であるため、利用できるかどうかは異なります。
最後に、典型的で一般的な解決策は、複数のスレッドを使用することです。タイマー専用のスレッドを作成します。このスレッドは、設定された時間だけスリープしてからコードを実行することのみを目的としています。このためには、共有データの処理、競合がないことの保証など、並行プログラミングの責任をすべて負う必要があります。
Boost.ASIO や新しい標準ライブラリなどの一部の高レベル ライブラリは、マルチスレッド ルートを使用することにした場合に、優れたタイミング メカニズムを提供します。