我有一個關於替代方法延遲除了睡覺的C++程序的問題。替代方法來延遲我的程序而不睡覺,因爲在C++中使用異步IO?
我有我的程序的一部分接收和發送UDP數據包到控制器。這部分程序必須異步運行。爲了減少此提供程序的開銷,我決定使用異步IO來接收UDP數據包,而不是使用單獨的線程來監視套接字。
我也跟着的sigaction的this例子來做到這一點。我注意到,如果我在嘗試使用這個sigaction的時候嘗試使用usleep,那麼每當我收到一個數據包的時候就會打破我的睡眠。這種說法是有道理的,因爲我認爲sigaction是由CPU上的某種中斷觸發的,這可能會阻止CPU進入休眠狀態。如果任何人有一個很好的解釋爲什麼會發生這種情況,我會很好奇知道。我的問題是,有時我必須連續發送幾個數據包,並且需要確保延遲它們,否則我的控制器會錯過它們。
我通常會使用睡眠延遲發送數據包,但現在我不能,因爲它得到通過我的sigaction打破。我曾想過可能會忙於等待,但這可能太不一致了。我也有關於可能使用一個定時清空的數據包隊列,但似乎可能有一個更簡單的解決方案。
除了睡眠之外,還有其他延遲發送數據包的方式嗎?有沒有辦法設置我的異步IO,所以它不會打破睡眠?我是否以錯誤的方式解決了這個問題?
如果您發現需要休眠直到異步操作完成,那麼您根本沒有任何用於異步的用途。不妨同步做。 – 2014-10-02 18:40:00
我應該澄清只有接收是異步完成的。只要我在主進程中發送一個數據包,發送就完成了。問題是異步操作會中斷所有初始化線程中的睡眠。 – 2014-10-02 19:38:11