- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 boost 套接字,我在上面定义了一个异步接收:
void recv() {
boost_socket->async_receive_from(
boost::asio::buffer(buffer, MTU),
endpoint,
[this](boost::system::error_code ec, std::size_t bytes) {
// Treatment...
if (event) {
Component::recv(handler);
}
}
});
}
但是如果没有事件到达这个套接字(套接字上没有数据包),我会被困在 lambda 方法中......
有没有一种方法可以在此 recv 上定义超时?
最佳答案
Is there a way of defining a timeout on this recv ?
如果对 Component::recv
的调用本身就是一个 asio
操作,您可以定义一个截止时间计时器,在超时时取消读取操作。您可以在 Boost documentation 中找到示例(示例/cpp03/timeouts/blocking_tcp_client.cpp)。
否则,您可以使用 std::future:
using namespace std::chrono_literals;
auto fut = std::async(std::launch::async, &Component::recv, handler);
if(fut.wait_for(500ms) == std::future_status::timeout) {
// timed out
}
关于c++ - 在 boost async_receive_from 上定义超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47789668/
对于通过 UDP 进行的一些数据传输,我使用了来自 boost 的 async_receive_from 函数。我的接收函数是 udp::socket socket_;
在我发现的所有样本中,我看不到任何缓冲。这是否意味着在处理程序中我总是收到完整的消息?没有分块。 我在文档中找不到任何答案。 Is boost::asio::ip::udp::socket::asyn
下面从真实代码库简化而来的 MVCE 显示了同样的问题。 服务器连续发送 5 个 UDP 帧的“突发”,其中填充了 150 个字节的值 0xA5,中间有很小的延迟或没有延迟。暂停 1 秒。 客户端使用
我在 udp_server 类中创建了异步函数 start_receive() 和 start_send()。但是通过代码不会停止并等待“async_receive_from”行。这是我的代码; cl
我正在使用 async_receive_from 读取多播输入。所以我的想法是,当我检测到间隙时,我将通知另一个帮助线程请求/获取间隙填充消息。虽然这是在工作中,但主线程将继续接收和排队任何传入的消息
在下面的代码中,asynch_receive_from 的行为是同步的。在收到数据之前它不会返回。查看最后的日志表明了这一点。这可能不是那个一开始很明显,因为有相当高的数据传入率。但是当没有数据时,只
我正在使用 boost::asio 来捕获 udp 端口上的数据包。我只是新来的。如何使 async_receive_from 复制数据以仅缓冲具有指定源 ip 的数据包? 最佳答案 根据您所说的
我有一个 boost 套接字,我在上面定义了一个异步接收: void recv() { boost_socket->async_receive_from( boost::asio::buf
class UDP_Receiver { public: udp_receiver((boost::asio::io_service& io_service) : idle_work_
我尝试使用 async_receive_from 方法来获取数据。但是当我开始时,程序不会等待超时或正在读取某些内容。我知道数据正在端口(wireshark)上传入。这可能是什么原因。我尝试使用来自
我有一个设置,多个对等方每 200 毫秒 (5fps) 广播一次 udp 数据包(包含图像)。 虽然接收本地流作为外部流在 Windows 下工作正常,但相同的代码(除了 Windows XP 中的
我正在尝试使用 Boost 库创建一个简单的异步接收器。我遵循了示例和书籍,这就是我到目前为止能够做到的: class networkUDPClient { public: utilityTr
基本上: void start_receive() { socket_.async_receive_from( boost::asio::buffer(recv_buf
我正在尝试使用 3 次握手建立异步连接。在代码的底部有一个 main 方法,它接受一个参数来确定它是充当客户端还是服务器。 如果它充当服务器,它会创建一个套接字并等待它接收到数据,然后调用回调函数 m
Boost asio 专门允许多个线程调用 io_service 上的 run() 方法。这似乎是创建多线程 UDP 服务器的好方法。但是,我遇到了一个问题,我正在努力寻找答案。 查看典型的 asyn
我有一个相当大的应用程序,可以在 Linux 上正常运行。我最近使用 VC2012 和 boost asio 1.52 在 Windows 7 上编译它并遇到了一个奇怪的问题: async_recei
我正在使用 boost::asio 创建服务器应用程序,特别是 UDP API。现在我从一个池中启动多个线程,使用 async_receive_from 监听单独的缓冲区。这在我主要开发的 Ubunt
我想创建一个自治线程,专门用于使用 boost 库 (asio) 从 UDP 套接字接收数据。这个线程应该是一个无限循环,由从 UDP 套接字接收到的一些数据触发。在我的应用程序中,我需要使用异步接收
int main() { boost::asio::io_service io_service; Worker ob1(&io_service); ob1.AsyncRead(); i
我已将 Boost 白天客户端教程中的 UDP 客户端代码修改为以下内容: class UDPClient { public: udp::socket* socket; udp::en
我是一名优秀的程序员,十分优秀!