2
我用用async_read_some
這個代碼與超時升壓ASIO async_read_some超時
readdata=0;
port_->async_read_some(boost::asio::buffer(vector),
boost::bind(readCallback));
//init async timer
boost::asio::deadline_timer timer(io);
timer.async_wait(boost::bind(timeoutHandler));
timer.expires_from_now(boost::posix_time::seconds(5));
io.reset();
do {
io.run_one();
}
while (readdata==0);
這裏是我的回調
void readCallback()
{
std::cout << "READ CALLBACK: "<<x<<std::endl;
readdata=1;
return;
}
void timeoutHandler()
{
std::cout << "TIMEOUT CALLBACK: "<<x<<std::endl;
readdata=1;
}
我的問題是,timeoutHandler是在5秒後立即和不執行
自從我使用asio以來已經有一段時間了,但是當你移除'io.reset()'時會發生什麼?它可能導致'async_wait'重置 –
就像@SteveVanOpstal所說的那樣,你應該移除'io.reset()'。您將任務添加到異步事件處理程序(io_service)中,然後在運行將執行您添加的事件(您使用'run_one()'執行的)的服務之前立即重置它。我建議你閱讀並學習更多關於'io_service'和它是如何工作的。 –
謝謝,我試過了,但結果相同,即時調用'timeoutHandler()' – user2071938