Clock() 和 usleep() 不匹配

标签 c

我正在将数据包从发送者线程发送到接收者线程。为了控制发送速率(每秒数据包),我计算了发送下一个数据包之前需要等待的时间,以保持一定的发送速率。

假设计算出的等待时间为 100 微秒。

  1. 我检查现在是什么时间:(double)(clock() - start)/CLOCKS_PER_SEC;
  2. 我调用usleep(100);
  3. 我再次检查时间:(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/

相关文章:

有条件的跳跃或移动取决于未初始化的值

c - 调用 make 时缺少分隔符

c - linux下C中的文件描述符示例

c - 如何在不使用strtok的情况下根据特定字符拆分字符串

C程序返回整数的数字之和

c - 如何检查是否未获取互斥量?

c - 包含要数组的数字的文本文件

通过 C API 更改 MySQL 查询分隔符

c# - Environment.SetEnvironmentVariable 未设置任何值

c - Errno 35 (EAGAIN) 在 recv 调用时返回