2009-12-17 64 views
6

我的boost::asio::deadline_timer更好的提升ASIO deadline_timer例如

給出總會超時的例子一個更好的例子是後並調用close方法。我試着在定時器上調用cancel(),但這會導致傳入async_wait的函數立即被調用。

在異步TCP客戶端使用定時器的正確方式是什麼?

+1

這種行爲背後有理由。每次調用async_wait都會與完成處理程序配對。呼叫取消不會影響這一點。 –

回答

20

您提到在定時器上調用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; 
    } 
} 

希望這會有所幫助。如果不是,你在找什麼樣的具體例子?

+0

io_service.stop()取消定時器嗎? –