CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

请问运行一段c++程序,我如何看这段程序运行所花费的精确时间?

楼主lyff8neo(对不起,我对你忠诚,因为你是c++)2005-12-31 12:15:06 在 C/C++ / 新手乐园 提问

请问运行一段c++程序,我如何看这段程序运行所花费的精确时间? 问题点数:10、回复次数:11Top

1 楼longuby(龙骨)回复于 2005-12-31 12:26:13 得分 1

<time.h>  
   
  clock_t   start,end;  
   
  start   =   clock();  
   
  //   程序  
   
  end   =   clock();  
   
  cout<<   end   -   start<<endl;  
   
  Top

2 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2005-12-31 12:29:19 得分 1

#ifndef   _CLOCK_T_DEFINED  
  typedef   long   clock_t;  
  #define   _CLOCK_T_DEFINED  
  #endif  
   
  #include<iostream>  
  #include<ctime>  
   
  using   namespace   std;  
   
  int   main()  
  {  
          clock_t   start,finish;  
           
          start=clock();  
          int   i;  
          for(i=0;i<10000000;++i)  
          {  
                  //  
          }  
          finish=clock();  
           
          cout<<"The   time   that   the   program   costs   is   :"<<finish-start<<endl;  
                   
           
          system("pause");  
          return   0;  
  }  
   
  时间精度为毫秒  
  Top

3 楼cunsh(村少)回复于 2005-12-31 12:39:43 得分 0

xuexi;Top

4 楼sjtuwang(旺旺)回复于 2005-12-31 12:59:02 得分 0

正解!!!Top

5 楼tanq()回复于 2005-12-31 13:45:50 得分 2

上面的做法没一个是正确的!  
  如果在DOS环境下,这样的做法勉强可以说是正确的,但是在WINDOWS和UNIX等多线程的操作系统下这样的做法就错了,因为没有考虑到线程的切换时间和,当前运行的线程的挂起时间!  
  正确的做法是调用类似WINDOWS下GETTHREADTIME的函数,在UNIX下调哪个函数不是很清楚,现在正在学习UNIX下的开发   :)Top

6 楼YanHuang82(炎黄)回复于 2005-12-31 14:38:12 得分 0

windows   下可以用   ::GetTickCountTop

7 楼whyglinux(山青水秀)回复于 2005-12-31 17:29:16 得分 1

The     clock()     function   returns   an   approximation   of   processor   time   used   by   the   program.  
   
  测量程序使用的时间用clock()是正确的。Top

8 楼tb01412(tb)回复于 2005-12-31 17:56:47 得分 2

呵,用常规方法都计算不出进程所占用的时间  
  用   ::GetTickCount只能算出当前系统总的心跳数(从启动到当前),用clock();计算出从启动到现在的时间毫秒数,都无法计算出当前进程占用CPU的时间。  
  在LINUX中,可以用驱动的方式来间接获取,因为在内核态下可以访问到当前进程的状态,包括当前进程在用户态下所占用的CPU时间(以系统滴答数)与内核态下占用的时间,不过用此方法只能精确到HZ级换算后的时间。而且当进程处理时间大于等于两个时间片时,所测时间就不再精确Top

9 楼whatsouta(某疯子)回复于 2005-12-31 17:56:57 得分 0

unix   下:  
  time   程序   参数  
   
  程序结束后,time命令会给出三个值:  
  如:time   echo   "abc"  
   
  real         0m0.00s  
  user         0m0.00s  
  sys           0m0.00s  
  Top

10 楼WilliamJ(威廉J)回复于 2005-12-31 18:05:27 得分 0

使用Boost中的Timer库,使用很简单,先声明一个对象:Boost::timer   t1;  
  然后用   t1.restart();   将时间归   0,然后写你自己的代码,最后调用t1.elapsed()   返回你的代码的执行时间!你可以这样将时间输出来   cout<<t1.elapsed()<<endl;  
  Top

11 楼whyglinux(山青水秀)回复于 2005-12-31 18:18:21 得分 3

>>   用常规方法都计算不出进程所占用的时间  
   
  测量进程(程序)或者其中的一部分代码执行所需要的时间是一个经常用到的操作。如果常规方法都不行的话,那简直是不可想像的。  
   
  >>   用clock();计算出从启动到现在的时间毫秒数,都无法计算出当前进程占用CPU的时间。  
   
  clock()计算的就是程序使用的   processor   time。  
   
  Boost中的Timer其实就是使用的   clock()。Top

相关问题

  • 怎么运行c++?
  • C++ Builder运行错
  • 什么叫"C运行期"?
  • 在linux下运行c
  • C#程序运行问题
  • =====怎样让editplus运行C#?===
  • 怎样让Editplus运行C#?
  • C# Dll 运行库 初学
  • linux下C\C++的编译,运行
  • NT4 SERVER中运行C#写的程序不能运行...

关键词

  • c++
  • start
  • 程序
  • clock
  • 计算
  • 进程
  • 时间

得分解答快速导航

  • 帖主:lyff8neo
  • longuby
  • sankt
  • tanq
  • whyglinux
  • tb01412
  • whyglinux

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo