怎样得到c程序从开始运行到结束所需要的时间

怎样得到c程序从开始运行到结束所需要的时间,第1张

先在程序头加入时间函数文件#include <timeh> ,用clock_t 定义一个变量,如clock_t a; 把a=clock(); 放在函数的底部,下面用一行printf("The time was: %f\n", a / CLK_TCK); 来显示这个程序从开始到执行clock()用的时间,因为clock()放在了最后,所以这个时间和整个程序运行的时间几乎是一致的

在开始的时候,输出一个系统时间,结束的时候输出一个系统时间

#include<timeh>

void

main(){

struct

tm

sttime,fitime;

_getsystime(&sttime);

m=1;

a[0]=0;

a[1]=1;

while(m>0){

if(check(m)){

if(m==L-1){

out();

change();

}else

extend();

}else

change();

}

_getsystime(&fitime);

printf("starttime:

%d:%d\n",sttimetm_min,sttimetm_sec);

printf("finishtime:%d:%d\n",fitimetm_min,fitimetm_sec);

}

clock()函数,计算代码消耗的cpu时间,一般用处不大

time()函数,获取系统时间,许多依赖于time()计算超时的程序,在修改系统时间后一般都不能正常运行。

因此本人推荐:

windows下:计算绝对时间QueryPerformanceCount/QueryPerformanceFrequency

cpu脉冲计数/ cpu频率,获得开机以来的秒数。

当然,这两个函数获得时间精度是很高的(us级别),只是我们一般用不到这么精确。

linux下:

#include <sys/sysinfoh>

调用sysinfo()获得系统启动以来经历的秒数时间。这个不属于高精度计时。

如果要进行高精度计时,高精度时间,C运行库的gettimeofday()(当然据我估计也是受到系统更改时间的影响)。

用绝对时间判断系统时间有没有被更改,用高精度时间精确计时,二者结合才是王道。

这看起来像是51单片机的汇编, 12T的话,就是每个指令周期都需要12个时钟周期,一个U就循环一次,你数数几条指令要执行就行了然后查一下手册,看看每条指令需要几个指令周期,不同的指令是不同的而且每个51单片机也不同

不过这个方式绝对不适合精确延时,也就大概延迟一下而已

有个timeh

头文件

clock_t

start,end;

start=clock();

end

=

clock();

end-start就是了。

单位为ms,但是不能太精确,因为其实返回的是clock数,但是一般够用了,你可以搜一下。

第一种方法利用SystemDateTimeNow

[csharp]

view

plaincopy

static

void

SubTest()

{

DateTime

beforDT

=

SystemDateTimeNow;

//耗时巨大的代码

DateTime

afterDT

=

SystemDateTimeNow;

TimeSpan

ts

=

afterDTSubtract(beforDT);

ConsoleWriteLine("DateTime总共花费{0}ms",

tsTotalMilliseconds);

}

第二种用Stopwatch类(SystemDiagnostics)

[csharp]

view

plaincopy

static

void

SubTest()

{

Stopwatch

sw

=

new

Stopwatch();

swStart();

//耗时巨大的代码

swStop();

TimeSpan

ts2

=

swElapsed;

ConsoleWriteLine("Stopwatch总共花费{0}ms",

ts2TotalMilliseconds);

}

第三种用API实现:

[csharp]

view

plaincopy

[SystemRuntimeInteropServicesDllImport("Kernel32dll")]

static

extern

bool

QueryPerformanceCounter(ref

long

count);

[SystemRuntimeInteropServicesDllImport("Kernel32dll")]

static

extern

bool

QueryPerformanceFrequency(ref

long

count);

static

void

SubTest()

{

long

count

=

0;

long

count1

=

0;

long

freq

=

0;

double

result

=

0;

QueryPerformanceFrequency(ref

freq);

QueryPerformanceCounter(ref

count);

//耗时巨大的代码

QueryPerformanceCounter(ref

count1);

count

=

count1

-

count;

result

=

(double)(count)

/

(double)freq;

ConsoleWriteLine("QueryPerformanceCounter耗时:

{0}

秒",

result);

}

在C语言中计算时间,可以使用标准库中的计时函数——clock()。

函数原型:

clock_t clock( void );

其中clock_t是用来保存时间的数据类型,在timeh文件中,可以找到对它的定义:

#ifndef _CLOCK_T_DEFINED

typedef long clock_t;

#define _CLOCK_T_DEFINED

#endif

很明显,clock_t是一个长整形数。在timeh文件中,还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元,其定义如下:

#define CLOCKS_PER_SEC ((clock_t)1000)

可以看到每过千分之一秒(1毫秒),调用clock()函数返回的值就加1。下面举个例子,可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间:

void elapsed_time()

{

printf("Elapsed time:%u secs\n",clock()/CLOCKS_PER_SEC);

}

当然,也可以用clock函数来计算的机器运行一个循环或者处理其它事件到底花了多少时间:

#include <stdioh>

#include <stdlibh>

#include <timeh>

int main( void )

{

long    i = 10000000L;

clock_t start, finish;

double  duration;

printf( "Time to do %ld empty loops is ", i );

start = clock();

while( i-- )      ;

finish = clock();

duration = (double)(finish - start) / CLOCKS_PER_SEC;

printf( "%f seconds\n", duration );

system("pause");

}

以上就是关于怎样得到c程序从开始运行到结束所需要的时间全部的内容,包括:怎样得到c程序从开始运行到结束所需要的时间、C语言计算递归程序的运行时间、求C语言程序:如何获得一个程序运行的时间 最好带一段简单的代码 新人学不懂 呵呵 谢谢大家啦等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9387901.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存