2012-08-08 56 views
1

也許我誤解是如何工作的,但我想超時添加到read_until電話,所以我創建了一個deadline_timer並調用read_until之前就開始了,但read_until還是塊一切,而且定時器永遠不會被激活。我做錯了嗎?以下是我的代碼片段。嘗試使用deadline_timer添加超時read_until

void MyClass::handle_timeout(const boost::system::error_code& error) 
{ 
    // Our deadline timer went off. 
    std::cout << "Deadline Timer was triggered." << std::endl; 
    Disconnect(); 
} 

// Read some data. 
void MyClass::ReadData(){ 
      boost::asio::streambuf response; 
      deadline_.expires_from_now(boost::posix_time::seconds(DEFAULT_TIMEOUT)); 
      deadline_.async_wait(boost::bind(&MyClass::handle_timeout, this, _1)); 

      boost::asio::read_until(socket_,response,asString); 
} 
+0

都做,定時器和插座使用相同的io_service對象?如果沒有,那就是原因。 – 2012-08-08 18:17:00

+0

是的,它們都是用與它們的參數相同的io_service構造的。 – CptanPanic 2012-08-08 18:33:22

回答

1

你誤解了事情的工作原理。如果您desire cancelability,你需要使用異步方法,如

boost::asio::async_read_until(...); 

,而不是

boost::asio::read_until(socket_,response,asString); 
相關問題