boost:asioのドキュメント(非同期クライアントではサイレントに表示されます)を読み、ここを調べましたが、ここでツリーのフォレストを見つけることができないようです。
次のようなメインループを持つシミュレーションがあります。
for(;;)
{
a = do_stuff1();
do_stuff2(a);
}
簡単です。
私がやりたいのは、次のように変更することです。
for(;;)
{
a = do_stuff1();
check_for_new_received_udp_data(&b);
modify_a_with_data_from_b(a,b);
do_stuff2(a);
}
次の要件がある場合:
- 積極的に聞いていなかったからといって、データを失うことはありません。IEサーバーがパケットを送信したときにcheck_for_new_received_udp_data()ではなくdo_stuff2()を使用していたため、パケットを失いたくありません。
- メインのforループは60Hzで実行する必要があるため、check_for_new_received_udp_data()ブロックを約2ms以上持つことはできません。
- サーバーは他の場所で実行され、スケジュールは完全に不安定になります。データがない場合もあれば、同じパケットを繰り返し取得する場合もあります。
私は非同期UDPで遊んだことがありますが、それは無期限にブロックするio_service.run()を呼び出す必要があるので、それは本当に私を助けません。
ブロッキングソケットの読み取りをタイムアウトすることを考えましたが、それを行うには、チートしてブースト呼び出しから抜け出す必要があるようです。そのため、これは初心者ではありません。
答えは糸脱毛を伴うのでしょうか?いずれにせよ、誰かが私にいくぶん似ている例を親切に指摘してもらえますか?確かにこれは以前に行われたことがあります。