0

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

我想我只是愚蠢,但我正在尝试使用 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 根本没有像我想要的那样计算滴答声。任何人都可以识别问题吗?我是这门语言的相对业余爱好者。

4

2 回答 2

2

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

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

于 2013-03-14T21:47:34.747 回答
2

我的两分钱。当您执行 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 是挂钟时间 - 从通话开始到结束的时间。

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

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

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

于 2013-03-14T21:48:58.890 回答