每秒运行代码正好10000次

edw*_*pku -2 c++ linux loops timer

我正在为我的程序编写测试代码.我需要代码每秒运行10000次.我的解决方案是:

for(int i = 0; i < 1000; ++i) {
  for(int j = 0; j < 10; ++j) {
  // do something here. Maybe ++k or some code else
  }
  usleep(1);
}
Run Code Online (Sandbox Code Playgroud)

事实证明,时间超过1秒.所以我必须调整1000和100才能满足要求.这不是一个好习惯:当运行时间发生变化时,我必须更改代码.

有任何想法吗?

更新:

该程序正在Linux上运行.我编写了一个msg队列.像往常一样,它有生产者和消费者.我想要全程测试.我需要测试代码发送几个msg,间隔很小(优选100μs).

如果我在没有睡眠的情况下发送所有消息,则消息队列将满,并且在整个测试期间不起作用.

Cod*_*ray 5

这不是一个好习惯:当运行时间发生变化时,我必须更改代码.

你是对的,时间循环从来都不是一个好主意,自20世纪80年代以来我甚至没有听说过有人写过它们.今天的高端和低端PC之间存在太多差异,因此这是一种可行的策略.更不用说它在一台多任务机器上的脆弱性.

你应该使用计时器.API依赖于平台,但您没有告诉我们您的目标平台是什么.查看操作系统文档以获取更多详细信 根据您需要的分辨率,可能有几种不同类型的计时器可供选择.

请记住,即使是相对高分辨率的定时器也不一定能保证毫秒级的精度,除非您在实时操作系统上运行.

然后就是为什么你需要在这个时间间隔内执行代码的问题.我想有可能是解决问题的更好方法,无论它是什么.但问题中没有提供足够的信息来猜测.