实现以恒定间隔刷新的缓冲流的标准方法?

时间:2011-02-17 20:26:24

标签: c++ gcc boost boost-iostreams

我正在模拟来自以给定数据包/秒间隔产生数据包的源的数据包。我想创建一个像ostream对象一样运行的流类,允许operator<<用于通过它输出内容,但需要注意的是,每个插入的值都应该从缓冲区释放到文件中描述符,按顺序,以指定的间隔。

因此,例如,我可能有一个带文件描述符sockfd的套接字并说:

MyBuffer buffer(sockfd, 1000); //Interval of 1000 milliseconds
buffer << 1 << 2 << 3;

并且输出将被定时以便输出

1
<1 second gap>
2
<1 second gap>
3

到套接字。我现在正在看Boost.Iostreams,这会是一个很好的解决方案吗?是否有一些神奇的短语我可以谷歌描述这个我不知道的问题?

任何帮助都将不胜感激。

由于 布拉德

2 个答案:

答案 0 :(得分:2)

与构建自定义流类完全正交的一个选项是维护由线程每秒轮询的字符串队列。每次轮询队列时,线程都会读出第一个元素并通过网络发送它。

这不使用流库,但我认为这可能是你想要的。在内部,大多数流只是将所有输入汇总到大量文本中,丢失了有关文本的哪些部分对应于您插入的每个对象的信息。

编辑:我应该第一次提到这个,但请务必在此队列中使用相应的同步!您可能希望使用互斥锁来保护对它的访问,或者如果不起作用则使用一个聪明的无锁队列。请确保不要盲目地从多个线程中读取和写入它。

答案 1 :(得分:2)

1000ms应该是异步的吗?如果没有,你可以在你的流的运算符&lt;&lt;中放置一个Sleep(1000)。根据你想要做的事情,它可能适合你。