我正在开发一个没有确定的算法来解决使用C语言的项目。我正在使用蒙特卡罗技术来解决这个问题。我希望将随机猜测的数量限制为用户指定的执行时间。 这意味着我想充分利用用户定义的执行时间限制(作为命令行参数)来进行尽可能多的随机迭代。 到目前为止,我可以检查循环条件的执行时间吗?
for(trials=0;execution_time<specified_time;trials++)
如果是这样,我该怎么办? 或者,如果还有其他方式,欢迎。谢谢。
P.S。我正在使用代码块10.05进行编码和GNU编译。
答案 0 :(得分:2)
您可以尝试标准功能时钟(),它返回自程序启动以来内部时钟周期数。有关详细信息,请参阅该函数的文档。
答案 1 :(得分:2)
是的,如果您的计算机上有足够细粒度的时钟(而且确实如此)。
记录模拟开始的时间。
对于循环周围的每次旅行,找到当前时间以及开始时间和现在之间的相应增量。如果该值大于限制,请停止。
如果您使用time()
的一秒钟粒度,请注意量化效果。如果用户说'1秒',如果你的程序在T = N.999s开始并且你停在T =(N + 1).001s,那么你最终可能会运行一小段时间。任何量子都可以产生相同的效果,但由于微秒和纳秒是正常的亚秒级粒度,量子的大小不再是一个问题。
我所知道的高分辨率时钟功能是:
答案 2 :(得分:0)
感谢大家的意见。一个简单的两行代码为我完成了这项工作:
time_t start_time = time(NULL);
while (((int)(time(NULL) - start_time)) < execution_time)
{
/* ...... */
}