gpt4 book ai didi

c++ - 用时间检查数据?

转载 作者:可可西里 更新时间:2023-11-01 02:42:29 24 4
gpt4 key购买 nike

有没有办法在 asio 中检查特定时间的数据?

我有一个带有方法的 asio 套接字的客户端

bool ASIOClient::hasData()
{
return m_socket->available();
}

我想在这里有某种延迟,这样它最多可以检查 1 秒的数据并更早地返回。此外,由于显而易见的原因,我不想对它进行投票,因为它可能需要一秒钟。我使用它的原因是,我确实向客户端发送数据并等待响应。如果他在一定时间内没有回应,我会关闭 socket 。这就是提到 hasData 的原因。

我知道使用 select 和 fd_set 是可行的。


asio 客户端是在服务器套接字类的 Accept 方法中创建的,稍后用于处理请求并将数据发送回连接到这里的人。

int ASIOServer::accept(const bool& blocking)
{
auto l_sock = std::make_shared<asio::ip::tcp::socket>(m_io_service);
m_acceptor.accept(*l_sock);
auto l_client = std::make_shared<ASIOClient>(l_sock);
return 0;
}

最佳答案

您只需要尝试阅读

通常的方法是为所有可能需要“很长时间”(甚至无限长)的异步操作定义截止日期。

这在异步执行中很自然:

只需添加一个截止时间计时器:

 boost::asio::deadline_timer tim(svc);
tim.expires_from_now(boost::posix_time::seconds(2));
tim.async_wait([](error_code ec) {
if (!ec) // timer was not canceled, so it expired
{
socket_.cancel(); // cancel pending async operation
}
});

如果你想将它用于同步调用,你可以明智地使用 poll() 而不是 run()。看到这个答案:boost::asio + std::future - Access violation after closing socket它实现了一个辅助程序 await_operation,它同步但超时地运行单个操作。

关于c++ - 用时间检查数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33844441/

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