实现以恒定间隔刷新的缓冲流的标准方法?
-
14-11-2019 - |
题
我正在模拟来自源的数据包,该源以给定的数据包/秒间隔产生数据包。我想做一个流类,它的操作就像一个 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)<<.这取决于你想做什么,它可能适合你。
不隶属于 StackOverflow