首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><time.h> / <ctime>不计算滴答数

<time.h> / <ctime>不计算滴答数
EN

Stack Overflow用户
提问于 2013-03-14 21:39:35
回答 2查看 1.8K关注 0票数 0

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

我想我只是很蠢,但我试图用ctime来计算我整个程序中的CPU滴答数。我正在为一个学校项目编写一个加密算法,我试图包括一个计时器,这样我就可以添加噪声处理,在不同的密钥/明文组合中均衡时间。下面是对ctime的一个小测试:

代码语言:javascript
复制
#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);
}

其中的指纹:

代码语言:javascript
复制
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++),似乎是时间/时间。h根本没有像我希望的那样计算滴答数。有人能辨认出问题吗?在这门语言中我是一个相对业余的人。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-14 21:48:58

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

我没有输入任何文本就运行了您的代码,只需按enter键,它提供了以下输出:

代码语言:javascript
复制
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的精度“大”(以秒计)。

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

顺便说一句:真正的是从开始到结束的挂钟时间。

User是进程中用于用户模式代码(内核之外)的CPU时间。这只是执行进程时使用的实际CPU时间。

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-03-14 21:47:34

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

由于您的程序(想必)大部分时间都被阻塞在I/O上,所以没有多少秒就会过去。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15420715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档