3

我正在模拟来自以给定数据包/秒间隔生成数据包的源的数据包。我想创建一个像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,这是一个好的解决方案吗?是否有一些我可以用谷歌搜索的神奇短语来描述我不知道的这个问题?

任何帮助,将不胜感激。

谢谢布拉德

4

2 回答 2

2

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

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

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

于 2011-02-17T21:34:11.403 回答
2

1000ms 应该是异步的吗?如果没有,您可以在流的运算符<< 中放置一个 Sleep(1000)。根据您要执行的操作,它可能适合您。

于 2011-02-17T21:51:09.327 回答