作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在编写一个实现 RFC 2544 网络测试的程序。作为测试的一部分,我必须以指定的速率发送 UDP 数据包。
例如,我应该以 1Gb/s 的速度发送 64 字节的数据包。这意味着我应该每 0.5 微秒发送一次 UDP 数据包。伪代码可以类似于“Sending UDP packets at a specified rate”:
while (true) {
some_sleep (0.5);
Send_UDP();
}
但我担心在 Windows 和 Linux 中没有some_sleep()
函数可以给我 0.5 微秒的分辨率。
是否可以在 C++ 中完成此任务,如果可以,正确的方法是什么?
最佳答案
两种方法:
使用高分辨率计时器(例如 windows QueryPerformanceCounter)通过忙循环实现您自己的 sleep
允许速率略有变化,当您足够快于计算出的速率时,插入 Sleep(1)。使用 timeBeginPeriod 获得 1ms 分辨率。
对于这两种方法,您都不能依赖于准确的 sleep 。您将需要保持总计数器并在领先/落后时调整 sleep 时间。
关于c++ - 如何在 Windows 上用 C++ 以指定速率发送 UDP 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5067178/
我是一名优秀的程序员,十分优秀!