で時限イベントを処理する背後にあるベストプラクティスは何C
ですか?私が見ているシナリオは、サーバーから1秒以内に応答がない場合、クライアントからサーバーにデータを再送信する必要があるというものです。
コードはいいのですが、概念の説明ははるかに価値があります。
ほとんどのオペレーティングシステムには、何らかの形のタイマーがあります。Linux / Unix / Posixにはがalarm
あり、WindowsにはSetTimer
したがって、基本的には、メッセージを送信し、タイマーを、状況に応じて1秒、10秒、30秒などの応答が期待できる時間に設定します。
返信を受け取った場合は、タイマーをキャンセルし、返信で行う予定のその他のことをすべて実行します。タイマーが起動する前に応答がない場合は、再度送信します[タイマーのハンドラーで実際に送信するのではなく、「セマフォまたはフラグを通知する」ことを意味する場合があります]。
他のオペレーティングシステムの場合は、何を見ているのかを教えてください。ただし、ほとんどのオペレーティングシステムには、「X時間が経過したときに教えてください」を処理するための何らかのメカニズムがあります。
これには、クライアントとサーバー間の事前の同期が必要です。また、イベント管理用のライブラリが必要です。このようなライブラリは、タイマーおよびI/Oイベントマネージャーライブラリに記載されています。
プログラムが非ブロッキングI/Oを使用し、select()またはpoll()内でブロッキングを実行している場合、これらの関数にはオプションのタイムアウト引数があり、select()/ poll()呼び出しがI / Oイベントが発生していなくても、一定の時間が経過しました。その機能を使用して、プログラムに定期的にアクションを実行させることができます。