2012-02-11 21 views
1

Linuxで動作し、コールバック関数を特定の頻度でperdiodically呼び出させるために、sigeventとtimer_createを使用するプログラムを作成しました。今、プログラムを移植可能にしたい(WindowsとLinux)ので、#ifdefsを使用してWindowsと同等の機能を使用するのが一番の方法です。携帯用ライブラリのtimer_createとTimerQueueTimer機能(ブーストのような)

AFAIK、窓に相当するのはTimerQueueTimerです。

これはOSサービスですが、スレッドと同様に、Boost C++のようなライブラリを介して移植可能にすることができます。

問題はBoost C++ライブラリにあるのか、あるいはPOCOや他の優れたライブラリにあるのか知っていますか?

もし存在しなければ、ポータブルライブラリにそのようなものが存在するのを防ぐ何かがありますか?

boost :: asio :: deadline_timerは私が探しているものではなく、timer_createとTimerQueueTimerと同じ精度で定期的にコールバック関数を呼び出すサービスでなければなりません。

+1

私はlibevはあなたの問題を解決するかもしれないと思ったが、その後、私はそれがWindows上で実行されているのを聞いたことはありません実現、そのゴミの研究の後、私はこの見つけます。http://ドキュメントを.dvgu.ru/devel/ev.html#win32_platform_limitations_and_workarounds WindowsイベントシステムはPOSIXと互換性がありません。 – lvella

+0

そのためには、ポータブルライブラリを使用する必要があります。 'boost :: asio'をもう一度見てください。それは確かに必要なことをすることができます。 –

答えて

1

POCOには、TimerTask(s)を実行するマルチスレッドTimerクラスがあります。基本的には、TimerTaskのrun()メソッドを、タイマーの期限が切れたときのやり方で上書きします。複数のタスクをTimerオブジェクトに追加してスレッドを生成し、すべての保留中のタスクを順番に実行することができます。タスクは、1回限りか、繰り返し可能な間隔で行うことができます。

あなたのすべてのニーズを満たしているかどうかはわかりませんが、見てみる価値はあります。

関連する問題