gpt4 book ai didi

c++ - boost asio async_read_some 超时

转载 作者:搜寻专家 更新时间:2023-10-31 02:12:35 24 4
gpt4 key购买 nike

我使用带有超时的 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 秒后执行

最佳答案

简单的错误。在调用 async_wait 之前,您应该执行 expires_from_now

#include <iostream>
#include <asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

int main() {
asio::io_service io_s;
asio::deadline_timer timer(io_s);
timer.expires_from_now(boost::posix_time::seconds(5));
timer.async_wait([](auto err_c) { std::cout << "After 5 seconds" << std::endl; } );

io_s.reset();

io_s.run();

return 0;
}

关于c++ - boost asio async_read_some 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42487847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com