我已閱讀了boost:asio文檔(它在異步客戶端上顯示爲無聲),並通過此處查看,但似乎無法在此找到樹的森林。升壓異步UDP客戶端
我有,有一個主循環看起來像這樣的模擬:
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我不想丟失數據包,因爲在服務器發送數據包時,我處於do_stuff2()而不是check_for_new_received_udp_data()。
- 我不能讓check_for_new_received_udp_data()塊的時間超過2ms,因爲main for循環需要以60Hz執行。
- 服務器將在別處運行,並且具有完全不穩定的時間表。有時候不會有數據,我可能會重複地獲得同一個數據包。
我玩過異步UDP,但需要調用io_service.run(),它無限期地阻塞,所以這對我沒有任何幫助。
我想過關閉套接字讀取超時,但似乎你必須作弊和擺脫增強呼叫來做到這一點,所以這是一個非起動器。
答案是否會涉及線程?無論哪種方式,有人可以向我指出一個有點相似的例子嗎?這當然是以前做過的。
+1不錯的第一個問題,歡迎來到SO – 2013-03-25 00:51:23
很長時間潛伏者,第一次海報。我將不得不做的下一步reddit :) – Grommit 2013-03-25 13:57:18