C ++ Boost.Asio - tcp套接字异步写

时间:2014-01-01 21:57:51

标签: c++ boost boost-asio

场景:

  1. 内部对象A(线程A),正在异步读取和写入boost :: asio :: ip :: tcp :: socket。

  2. 对象B(线程B)将数据发布到对象A的数据队列。

  3. 对象A应尽快在其数据队列中写入数据。

  4. 如何有效地实现第三点?

    现在我正在这样做:

    1. 队列中可能没有数据。

    2. socket-> async_send(data,handler);

    3. 内部处理程序:回到第二点。

    4. 我担心这种方法非常低效 - 大部分时间都会使用零长度数据调用async_send,直到可以发送实际数据。

      可能更好的方法是在对象A中有一个额外的线程,一旦发布新数据就会在套接字上执行同步写入?从对象B的线程中执行写入是不可能的。

2 个答案:

答案 0 :(得分:0)

首先,除非你有充分的理由要做,否则我个人不会将其分解为每个对象1个主题。

相反,请使用共享io_service(只需通过引用A和B ctors传递它。然后在io_serice.run()上有一个帖子。

假设其中一个对象也是async_reading,则无需编写0长度基准并在处理程序中创建循环。只需将async_write安排为数据何时进入。

答案 1 :(得分:0)

对象A应该尽快将数据写入其数据队列中”可以理解为等待C ++的未来,所以你检查answer和那个{{3最后但并非最不重要的是,我认为您的“数据队列”需要进行一些改进,您可以查看boost::asio::example