2013-09-16 42 views
0

我正在使用boost::io_service,如下所示。請問boost :: io_service :: post queue請求嗎?

boost::io_service service; 
service.post(boost::bind(...)); 
service.post(boost::bind(...)); 
service.post(boost::bind(...)); 

我想了解post是排隊我的請求,保證執行順序或可以請求被丟棄。我已經搜索了增強文檔的答案沒有運氣。

+1

不,不保證執行順序。 – Chad

+0

@Chad這是個好消息,這是否表明我的請求永遠不會被丟棄? – andre

+0

只要通過某個線程(通過run(),poll(),run_one()或poll_one())輪詢基礎'io_service',就會在適當的時候調用回調函數。 – Chad

回答

1

不,默認情況下不保證執行順序。

當回調發布到一個io_service,該回調將在「適當的時間」只要底層io_service正在積極一些線程(使用以下功能中的一個輪詢可以稱爲:run()run_one()poll()poll_one())。

某些可以發佈的命令可能永遠不會返回(例如在套接字上進行異步讀取,其中沒有數據發送)。這些類型的異步操作通常會向可以檢查的回調提供錯誤代碼。在某些情況下,此錯誤代碼將提供有關操作成功(或失敗)的詳細信息。在上面引用的例子中,如果底層套接字關閉,未完成的異步讀取將使用錯誤代碼「operation aborted」執行它們的回調。

+0

所以這意味着它排隊,如果我三次調用'poll_one()'三次請求都會觸發,假設它們不是無限循環。 – andre

+0

@andre:如果沒有保證的執行順序,如果poll_one()被調用三次,處理程序返回(沒有無限循環),並且處理程序不會將更多處理程序發送到'io_service'。 –

+0

@TannerSansbury這讓事情變得更加清晰。 – andre