0

で時限イベントを処理する背後にあるベストプラクティスは何Cですか?私が見ているシナリオは、サーバーから1秒以内に応答がない場合、クライアントからサーバーにデータを再送信する必要があるというものです。

コードはいいのですが、概念の説明ははるかに価値があります。

4

3 に答える 3

2

ほとんどのオペレーティングシステムには、何らかの形のタイマーがあります。Linux / Unix / Posixにはがalarmあり、WindowsにはSetTimer

したがって、基本的には、メッセージを送信し、タイマーを、状況に応じて1秒、10秒、30秒などの応答が期待できる時間に設定します。

返信を受け取った場合は、タイマーをキャンセルし、返信で行う予定のその他のことをすべて実行します。タイマーが起動する前に応答がない場合は、再度送信します[タイマーのハンドラーで実際に送信するのではなく、「セマフォまたはフラグを通知する」ことを意味する場合があります]。

他のオペレーティングシステムの場合は、何を見ているのかを教えてください。ただし、ほとんどのオペレーティングシステムには、「X時間が経過したときに教えてください」を処理するための何らかのメカニズムがあります。

于 2013-02-03T22:21:58.663 に答える
0

これには、クライアントとサーバー間の事前の同期が必要です。また、イベント管理用のライブラリが必要です。このようなライブラリは、タイマーおよびI/Oイベントマネージャーライブラリに記載されています。

于 2013-02-03T22:20:40.710 に答える
0

プログラムが非ブロッキングI/Oを使用し、select()またはpoll()内でブロッキングを実行している場合、これらの関数にはオプションのタイムアウト引数があり、select()/ poll()呼び出しがI / Oイベントが発生していなくても、一定の時間が経過しました。その機能を使用して、プログラムに定期的にアクションを実行させることができます。

于 2013-02-04T02:55:28.667 に答える