【问题标题】:clock() and usleep() don't match upclock() 和 usleep() 不匹配
【发布时间】:2016-04-04 18:20:09
【问题描述】:

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

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

  1. 我看看现在几点了:(double)(clock() - start)/CLOCKS_PER_SEC;
  2. 我打电话给usleep(100);
  3. 我又看看现在几点了:(double)(clock() - start)/CLOCKS_PER_SEC;

在第 3 步中,当我检查仅经过 50 微秒的时间时(我检查了 usleep 的返回值并确认它返回 0)。

这是为什么?它不应该休眠至少 100 微秒吗?或者我应该与clock() 一起使用不同的睡眠功能吗?感谢您的任何建议

【问题讨论】:

  • usleep 返回什么? 0 还是 -1?
  • usleep 返回 0。如何获取挂钟时间?
  • 没关系,我找到了一个例子。谢谢约阿希姆!

标签: c


【解决方案1】:

clock 函数的定义是为您提供经过的处理时间,而不是挂钟(不幸的是,Windows Visual Studio 运行时库为您提供)。如果你的进程实际上没有运行,因为它正在休眠,那么处理器时间不会过去

如何获得 walltime 取决于您的平台,但在 POSIX(如 Linux、OSX 或 BSD 变体)上,推荐的方法是 clock_gettimeCLOCK_REALTIME 时钟。

【讨论】:

猜你喜欢
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 2019-01-25
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 2012-03-26
相关资源
最近更新 更多