我的boost::asio::deadline_timer
更好的提升ASIO deadline_timer例如
給出總會超時的例子一個更好的例子是後並調用close
方法。我試着在定時器上調用cancel()
,但這會導致傳入async_wait
的函數立即被調用。
在異步TCP客戶端使用定時器的正確方式是什麼?
我的boost::asio::deadline_timer
更好的提升ASIO deadline_timer例如
給出總會超時的例子一個更好的例子是後並調用close
方法。我試着在定時器上調用cancel()
,但這會導致傳入async_wait
的函數立即被調用。
在異步TCP客戶端使用定時器的正確方式是什麼?
您提到在定時器上調用cancel()會導致傳遞給async_wait的函數立即被調用。這是預期的行爲,但請記住,您可以檢查傳遞給定時器處理程序的錯誤以確定定時器是否被取消。如果取消定時器,則傳遞operation_aborted。例如:
void handleTimer(const boost::system::error_code& error) {
if (error == boost::asio::error::operation_aborted) {
std::cout << "Timer was canceled" << std::endl;
}
else if (error) {
std::cout << "Timer error: " << error.message() << std::endl;
}
}
希望這會有所幫助。如果不是,你在找什麼樣的具體例子?
io_service.stop()取消定時器嗎? –
這種行爲背後有理由。每次調用async_wait都會與完成處理程序配對。呼叫取消不會影響這一點。 –