0

我正在研究一个没有确定算法可以使用 C 语言解决的项目。我正在使用蒙特卡洛技术来解决这个问题。以及我想限制在用户指定的执行时间范围内的随机猜测次数。这意味着我想充分利用用户定义的执行时间限制(作为命令行参数)来进行尽可能多的随机迭代。我可以检查循环条件到目前为止已经过去的执行时间吗?

for(trials=0;execution_time<specified_time;trials++)

如果是这样,我该怎么做?或者,如果还有其他方式,也欢迎。谢谢你。

PS 我正在使用 Code Blocks 10.05 进行编码和 GNU 编译器。

4

3 回答 3

2

您可以尝试标准函数clock(),它返回自程序启动以来的内部时钟滴答数。有关详细信息,请参阅该函数的文档。

于 2011-01-16T13:54:37.273 回答
2

是的,如果您的计算机上有足够细粒度的时钟(并且确实如此)。

  1. 记录模拟开始的时间。

  2. 对于循环中的每次行程,找到当前时间以及开始时间和现在之间的相应增量。如果值大于限制,则停止。

如果您使用time()它的一秒粒度,请注意量化效果。如果用户说“1 秒”,如果您的程序在 T=N.999s 开始并且您在 T=(N+1).001s 停止,您最终可能会运行一小部分时间。任何量子都可能产生相同的效果,但由于微秒和纳秒是正常的亚秒级粒度,因此量子的大小不再是问题。

我知道的高分辨率时钟功能是:

  • clock_gettime() - POSIX(纳秒)
  • gettimeofday() - POSIX(微秒)
  • times() - Unix 系统 V(每秒 CLK_TCK)
  • ftime() - 古代 Unix(毫秒)
  • 时钟() - ISO C - (CLOCKS_PER_SEC)
  • time() - ISO C - (秒)
于 2011-01-16T13:58:49.993 回答
0

谢谢大家的意见。一个简单的两行代码为我完成了这项工作:

time_t start_time = time(NULL);
while (((int)(time(NULL) - start_time)) < execution_time)
{
   /* ...... */
}
于 2011-01-18T15:05:57.100 回答