【问题标题】:<time.h> / <ctime> are not counting ticks<time.h> / <ctime> 不计算滴答声
【发布时间】:2013-03-03 11:27:34
【问题描述】:

编辑:它现在似乎正在运行。代码已更新以显示我的修订。谢谢大家的帮助。

我想我只是愚蠢,但我正在尝试使用 ctime 来计算整个程序中的 CPU 滴答数。我正在为一个学校项目编写一个加密算法,并且我正在尝试包含一个计时器,以便我可以添加噪声过程,从而平衡不同密钥/明文组合之间的时间量。 下面是对 ctime 的一个小测试:

#include <iostream>
#include <string>
#include <ctime>

int main (int arc, char **argv)
{
  double elapsedTime;
  const clock_t start = clock ();

  int uselessInt = 0;
  for (int i = 0; i <= 200; i++)
    {
      uselessInt = uselessInt * 2 / 3 + i;
      std::cout << uselessInt << std::endl;
    }

  clock_t end = clock();
  elapsedTime = static_cast<double>(end - start);

  std::cout << elapsedTime << " CPU ticks have elapsed since this application's initiation." << std::endl;
  return (0);
}

哪个打印:

0
1
2
4
/* ... long list of numbers ... */
591
594
0 CPU ticks have elapsed since this application's initiation.
[smalltock@localhost Desktop]$ 

我正在使用 GCC (G++),看来 ctime/time.h 根本没有像我想要的那样计算滴答声。任何人都可以识别问题吗?我是这门语言的相对业余爱好者。

【问题讨论】:

  • clock() 通常在 Windows 以外的系统中测量 CPU 时间。您可能没有使用足够的 CPU 时间来显示在这个简短的程序中。见stackoverflow.com/q/2134363/10077
  • 不,问题在于他从滴答声到秒数的施法。
  • 此程序中缺少)
  • 卡尔,谢谢你。这是复制中的简单错误。理查德,我已经尝试过加入和不加入。
  • @smalltock,你的演员很好。只需将) 编辑回您的问题,让每个人都开心。

标签: c++ counting ctime time.h


【解决方案1】:

我的两分钱。当您执行 cin.get() 时,它会等待您在控制台上输入内容,您是否执行了任何操作或只是输入了 enter?

我确实运行了您的代码,但没有输入任何文本,只需按 Enter,它就会给出以下输出:

Test Text
It's a stone, Luigi... you didn't make it.
0 CPU ticks have elapsed since this application's initiation.

Real    0m0.700s
User    0m0.000s
Sys     0m0.061s

这可能是因为与您的程序使用的 CPU 时间相比,CLOCKS_PER_SEC 的精度有点“大”(以秒为单位)

同时,持续时间行中的语法错误,您或者错过了另一个)或者应该删除第一个(

顺便说一句: Real 是挂钟时间 - 从通话开始到结束的时间。

User 是进程内用户模式代码(内核外部)所花费的 CPU 时间量。这只是执行进程时使用的实际 CPU 时间。

Sys 是进程内在内核中花费的 CPU 时间。

所以你基本上只有 0 CPU 时间,因为你一直在等待 I/O,没有 CPU 计算。

【讨论】:

  • 我已经尝试过这个有和没有 CLOCKS_PER_SEC 的划分。无论哪种方式,它都提供零。我在控制台中输入了难以理解的噪音字符串。这会导致任何问题吗?我不认为这是一个问题。我可以使用另一种方法来测量整个过程中的时钟滴答,而不是在期望 IO 时停止?它肯定会更容易测试。
  • @smalltock 由于您的程序不进行任何 CPU 计算,因此点击次数应该为零。但挂钟时间不为零。您的进程必须进行一些 CPU 计算。例如,计算 1 到 1000 的总和,这需要 CPU 计算,您可以测量点击次数。
【解决方案2】:

您程序中的elapsedTime 是以秒为单位的时间度量,而不是时钟滴答计数。如果你想打勾,请使用duration

由于您的程序(大概)将大部分时间都花在了 I/O 上,因此不会过去多少秒。

【讨论】:

  • 演员阵容怎么错了?几乎不管丢失的) 去哪里,都会好的。
猜你喜欢
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
相关资源
最近更新 更多