2011-06-21 34 views
0

我正在使用async_receive_from來讀取多播輸入。所以我的想法是,當我發現一個缺口時,我會通知另一個輔助線程來請求/獲取缺口填充信息。雖然這是在工作中,主線程將繼續接收和排隊任何傳入的消息。這部分我可以實現。另一個線程可以使用waitforsingleobject,我可以通過共享內存傳遞細節,並通知事件喚醒它。從另一個線程中斷boost :: asio :: async_receive_from

但是一旦它完成它的任務,我該如何獲得幫助線程來中斷啓動線程中的async_receive_from?當它出現在閱讀中時,它知道是誰被打斷了,所以它會知道下一步該做什麼?

+0

您的設計聽起來不必要的複雜,爲了得到一些更好的答案,您應該明確說明爲什麼要使用助手線程和共享內存。這兩個概念在使用asio時都有點奇怪。 –

回答

1

爲什麼在線程之間使用共享內存?除此之外,您應該用於在管理套接字的io_service的上下文中執行某些操作的機制是post()。您可以將任意事件發佈到io_service,並且將在該上下文中執行。很容易真的......因爲你打電話給async_receive_from,它不會阻塞,即io_service可以發送其他事件,這就是爲什麼post可以工作的原因。

+0

+1 post()是我在這裏推薦的。 –

+0

我剛剛嘗試過,它看起來像async_receive_from沒有得到服務,直到發佈(調度)函數完成。雖然應用程序在帖子啓動並且輸入了asyn_receive_from後仍然繼續,但在調度函數完成之前它似乎被阻止。基本上,我需要發佈功能和發佈功能同時運行和解鎖。 –

+0

Nim請查看我對您的建議的評論。謝謝 –