0

私は経験豊富なC++プログラマーではありません。だから私はJavaがC++で持っているのと同じようにtimerとtimertaskを実装する方法を知りたいだけです。timer_createのmanページにある例を試しtimer_createましたが、要件どおりに機能していません。特定の期間が経過した後、イベントが発生し、特定の条件が満たされた場合はタイマーをキャンセルする必要があります。

どんな助けでも大歓迎です。ありがとう、Yuvi。

4

2 に答える 2

2

これは、本質的に並行処理、または少なくとも非同期処理を求めているため、一般的に非常に難しい質問です。

最も単純なシングルスレッドのソリューションは、Posix の .xml などを使用することですalarm(2)。これにより、指定された時間後にシグナルがプロセスに送信されます。シグナル ハンドラを登録する必要がありますが (例: を使用signal(2))、すべての制限を受けます (例: ハンドラ内で非同期セーフ関数のみを呼び出さなければならないなど)。

2 番目のシングルスレッド オプションは、select-style (またはepoll-style) I/O ループを使用し、カーネル タイマー ファイル記述子を使用することです。ただし、これはごく最近の Linux 機能であるため、利用できるかどうかは異なります。

最後に、典型的で一般的な解決策は、複数のスレッドを使用することです。タイマー専用のスレッドを作成します。このスレッドは、設定された時間だけスリープしてからコードを実行することのみを目的としています。このためには、共有データの処理、競合がないことの保証など、並行プログラミングの責任をすべて負う必要があります。

Boost.ASIO や新しい標準ライブラリなどの一部の高レベル ライブラリは、マルチスレッド ルートを使用することにした場合に、優れたタイミング メカニズムを提供します。

于 2012-04-06T11:21:29.610 に答える