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

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

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

输出将被计时,以便输出

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

到插座。我在看升压。Iostreams现在,这是一个很好的解决方案吗?是否有一些神奇的短语,我可以谷歌描述这个问题,我不知道?

任何帮助将不胜感激。

谢谢 布拉德

有帮助吗?

解决方案

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

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

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

其他提示

1000ms应该是异步的吗?如果没有,您可以在流的运算符中放置睡眠(1000)<<.这取决于你想做什么,它可能适合你。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top