我正在将数据包从发送者线程发送到接收者线程。为了控制发送速率(每秒数据包),我计算了发送下一个数据包之前需要等待的时间,以保持一定的发送速率。
假设计算出的等待时间为 100 微秒。
- 我检查现在是什么时间:
(double)(clock() - start)/CLOCKS_PER_SEC;
- 我调用
usleep(100);
- 我再次检查时间:
(double)(clock() - start)/CLOCKS_PER_SEC;
在步骤 3 中,当我检查时间仅过去了 50 微秒时(我检查了 usleep
的返回值并确认它返回 0)。
这是为什么呢?它不应该休眠至少 100 微秒吗?或者我应该与clock()
一起使用不同的 sleep 函数吗?感谢您的建议
最佳答案
clock
函数的定义是为您提供经过的处理时间,而不是挂钟(不幸的是 Windows Visual Studio 运行时库为您提供了挂钟)。如果您的进程实际上并未运行,因为它正在休眠,则不会经过任何处理器时间
如何获取 walltime 取决于您的平台,但在 POSIX(如 Linux、OSX 或 BSD 变体)上,推荐的方式是 clock_gettime
使用CLOCK_REALTIME
时钟。
关于Clock() 和 usleep() 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36410002/