2011-06-06 5 views
0

Windows DLLをC++で作成していますが、何らかのイベントループが必要です。 いくつかのイベントが定期的にチェックされ、DLLはクライアントアプリケーションでコールバックをトリガーします。ポーリング期間は、イベントごとに異なる場合があります。WindowsのC++でのイベントループ、タイマーキュー付き

これをコード化する最良の方法は何ですか?タイミング精度は良好でなければなりませんが、パフォーマンスが最優先事項です。 複数のタイマーを持つ1つのWindows timer queueに複数の(4-5)タイマーを持つ方が良いでしょうか?あるいは、私は全く異なるソリューションを好むべきですか?

ありがとうございました

+0

可能であれば、ポーリングやタイマーを避けて、イベント駆動型システムを設計してください。非ポーリングソリューションがあなたのために働くかどうかを判断するために、より詳細な情報が必要になります。 – AJG85

答えて

0

どのようなパフォーマンスが優先されますか?繰り返し可能で正確なタイミングは間違っています... Windowsのような汎用OSではドライバの割り込みが多いため、「非常に難しい」。非常に正確なタイムアウトを生成できるさまざまなタイマーメカニズムがあります。ただし、信頼性の高いものはありません。どのくらいのジッタは許容できますか?どのような種類の範囲であなたの間隔ですか?コールバックは特定のスレッドコンテキスト内になければならないのですか、それとも何かイベントを発生させる可能性がありますか?

RGDS、 マーティン

+0

私はお詫び申し上げます - これはコメントではなく答えになるはずです。指のトラブル.. –

+0

'neeb'?私は新しい指が必要なようです! –

0

直接あなたは通常、ウィンドウハンドルに登録されているnIDEventを取るSetTimerでタイマーを設定することができ、質問に答えるために。そのウィンドウは、wParamとして登録された識別子を持つWM_TIMERメッセージを受信します。 KillTimerでタイマーを終了したら、タイマーを破棄する必要があります。 WM_TIMERは、Windows NTシステムで約10-15ミリ秒の粒度を持っています。

他のポスターで述べたように、本当にイベントベースのシステムを使う方がよいでしょう。おそらくあなたはユースケースであなたの投稿を編集することができ、より良い答えが示唆される可能性があります。

関連する問題