如何使用Boost Asio发送连续动态数据?

时间:2014-06-11 22:50:33

标签: c++ boost-asio

我正在尝试使用Boost Asio从我的PC向TCP客户端发送连续数据。数据是一个字符串,其中包含使用我的网络摄像头跟踪的对象的坐标。因此,对于每个被捕获的帧,该数据的频率非常高。由于有两个线程,摄像头捕获和消息发送,必须使用异步方法,我猜。根据我所读到的,我应该使用async_write()在start()中写入,然后在handle_write()中更新消息,但是我无法弄清楚如何做到这样我不会丢失来自任何框架的数据 - 我应该在哪里放置我的捕获坐标代码以及如何更新正在发送的消息。

1 个答案:

答案 0 :(得分:2)

拥有两个线程池:
线程1连续读取您的网络摄像头并在boost::circular_buffer中推送消息 线程2是asio-able逐个拉缓冲区和TCP发送数据
当然你必须同步访问循环缓冲区,有一个example如何做到这一点。您必须处理循环缓冲区的大小。

我想象另一个解决方案,两个asio线程使用相同的ioservice,第一个线程:

  1. 阅读网络摄像头
  2. 使用绑定的网络摄像头数据调用asio :: post发送例程
  3. 呼叫asio ::发送相同的"阅读网络摄像头"常规
  4. 第二个线程是套接字,只是TCP发送网络摄像头数据。

    在这种情况下,循环缓冲区被" asio对象的事件处理循环"取代,您不必担心同步访问。
    但是我想知道如何处理"事件队列"比排空更快,哼... ...