1
我有以下的(最小化)類處理我的服務器連接:如何防止Boost :: Asio計時器阻止io_service :: run()的返回?
class AsioServer {
protected:
boost::asio::io_service ioService;
public:
AsioServer() {}
void add_request() {
//Adding async requests to the ioService
}
void timeout() {
//Stop all pedning async operations
ioService.stop();
}
void perform() {
//Set a timer
boost::asio::deadline_timer timer(ioService);
timer.expires_from_now(boost::posix_time::seconds(5));
timer.async_wait(std::bind(&AsioServer::timeout, this));
//Performe all Async operations
ioService.run();
ioService.reset();
}
};
我的問題是,期限計時器防止ioService.run()
返回,直到它過期。我想要的是定時器僅在完成時取消並取消異步操作時調用,但在io_service
的上下文中不作爲work
。有沒有計時器作爲工作,或處理這種情況的另一種好方法?
在單獨的線程中運行? –
@JoachimPileborg:可能,但我認爲它會很難看,因爲在實際的代碼中,超時函數會做更多的事情。並調用'ioService.sop()'不會取消正在運行的處理程序,因此我將不得不使用大量的互斥體,我想避免。 – Haatschii
'io_service'是調度定時器完成處理程序(以及其他asio對象處理程序)的工具 - 如果'io_service'在此之前退出,則沒有人會調用您的'timeout'函數! –