【问题标题】:I'm not getting the elapsed time in seconds我没有以秒为单位获得经过的时间
【发布时间】:2017-10-07 01:55:00
【问题描述】:

我需要知道我的程序经过的时间(以秒为单位)。只是经过的时间,我没有在两者之间做任何事情,所以我不需要两个事件之间的时间,我想做的只是在代码中。

clock_t begin = clock();
float timeElapsed = (float)begin/(CLOCKS_PER_SEC);
cout << timeElapsed << endl;

问题是,“时间”正在打印,但不是以秒为单位。我什至将它与天文钟进行了比较,它绝对不是以秒为单位的。当屏幕上出现“1.27818”之类的东西时,我预计它是 1.27818 秒,但显然不是。到达 1 需要太多时间,而这个时间绝对不是一秒。这是怎么回事? “(float)begin/(CLOCKS_PER_SEC)”不是应该在几秒钟内返回吗?

更新
我这样做了:

clock_t begin = clock();
float timeElapsed = (float)(clock() - begin)/(CLOCKS_PER_SEC);
cout << timeElapsed << endl;

但我得到的值是这样的:

0
1e-06
1e-06
0
1e-06
1e-06
2e-06
1e-06

【问题讨论】:

  • 使用std::chrono
  • 经过的时间是两个clock()调用之间的差。
  • 我不认为你的程序开始时clock()是0。
  • 在 linux 上,您可以在编译/执行前加上 time 命令。例如time x.cpp/time ./a.out
  • 它是特定于操作系统的,除非你只使用 C 中的 std::chrono&lt;time.h&gt;。在 Linux 上读取 time(7);您有不同类型的时间,实时时间、经过时间、单调时间、线程 cpu 时间、进程 cpu 时间。顺便说一句,在短时间内,硬件可能不够精确

标签: c++


【解决方案1】:

看看这个例子:

int main ()
{
  clock_t t;
  int f;
  t = clock();
  printf ("Calculating...\n");
  f = call_some_function();
  printf ("Result: %d\n",f);
  t = clock() - t;
  printf ("It took me %d clicks (%f seconds).\n",t,((float)t)/CLOCKS_PER_SEC);
  return 0;
}

需要注意的一点是,您可能想要对 clock() 进行减法 - 在操作之后开始,以获取操作所经过的时间。

【讨论】:

  • 我这样做了,但我得到的值是“1e-06, 2e-06, 3e-06, 2e-06, 0”。在这个序列中,这没有意义
  • 那是科学计数法。 1e-06 表示 1x10^-6 等。这是预期的,因为您正在调用 clock() 和 clock()-begin 在连续的行中
【解决方案2】:

你得到的值在scientific notation,如果你想要简单的形式你应该使用std::fixed流操纵器。例如:

std::cout << std::fixed << data;

还有documents关于std::clock()说:

只有对 std::clock 的不同调用返回的两个值之间的差异才有意义,因为 std::clock 时代的开始不必与程序的开始重合。 std::clock 时间可能会比挂钟快或慢,这取决于操作系统给予程序的执行资源。例如,如果 CPU 被其他进程共享,std::clock 时间可能会比挂钟慢。另一方面,如果当前进程是多线程的并且有多个执行内核可用,则 std::clock 时间可能会比挂钟提前。

该页面底部还有一个good example

【讨论】:

  • 但是它们也有问题...我尝试使用固定,但后来我得到:“..., 0.000000 0.000000, 0.000001, 0.000001, 0.000002, ...”。好像一直在重启
  • 我期待你的结果。你需要在调用clock()之间做点什么。
  • @jaryl clock() 返回的是大约处理器为您的程序提供的时间。那不是挂钟。如果处理器抢占您的进程,clock() 将停止,直到调度程序再次将您的进程分派给处理器。
【解决方案3】:

您需要一个开始时间和一个结束时间。减去它们,然后除以 CLOCKS_PER_SEC。

这样做:

clock_t begin = clock();
/* 

Do your process

*/
clock_t end = clock();
float timeElapsed = (float)(end-begin)/(CLOCKS_PER_SEC);
cout << timeElapsed << endl;

您会以科学记数法的形式得到答案。请注意,1 秒 = 10^6 滴答声。您需要将答案乘以 100 万才能在几秒钟内得到答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2013-06-19
    • 2019-08-29
    • 2012-03-31
    相关资源
    最近更新 更多