场景:
内部对象A(线程A),正在异步读取和写入boost :: asio :: ip :: tcp :: socket。
对象B(线程B)将数据发布到对象A的数据队列。
对象A应尽快在其数据队列中写入数据。
如何有效地实现第三点?
现在我正在这样做:
队列中可能没有数据。
socket-> async_send(data,handler);
内部处理程序:回到第二点。
我担心这种方法非常低效 - 大部分时间都会使用零长度数据调用async_send,直到可以发送实际数据。
可能更好的方法是在对象A中有一个额外的线程,一旦发布新数据就会在套接字上执行同步写入?从对象B的线程中执行写入是不可能的。
答案 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。