是否有可能對io_service.run_one()的嵌套調用不是boost :: asio的有效使用。Boost :: asio和嵌套/遞歸service.run()/ run_one()
例如我有一個處理程序,它在套接字上接收到某個東西后執行。 io_service正在使用io_service.run_one()在另一個線程中運行。因此,在我看來,服務接收處理程序後,io_service將停止。
然後在接收處理程序中,我再次執行io_service.run_one()以便通過套接字發送一些東西。這意味着,存在io_service.run_one()方法的嵌套/遞歸調用。
此行爲不起作用。我的意思是有時run_one()方法中有一個塊永遠不會返回。我也找不到有關這個特殊情況的任何文件處理。
那麼,是否允許遞歸/嵌套io_service執行或者這不是一個好行爲?
P.S. io_service.reset()在每個run_one()執行前使用。
事實上,我也認爲這不是安全使用asio的方法。我已經將完整的實現改爲基於狀態(比如自動機),並且不再遇到任何阻塞問題。看起來,如果從處理程序調用run_one()方法有時可能永遠阻塞。 – cgart