有一个简单的方法。在一段程序之前用GetTickCount计算下时间,在程序结束之后再用GetTickCount计算下时间,两段时间差就是这段时间运行所用的时间,单位是毫秒,如:
#include<stdioh>
#include<windowsh>
int main(void)
{
int i, j;
DWORD t1 = GetTickCount();
for (i = 0; i < 10000; ++i)
{
for (j = 0; j < 10000; ++j)
{
}
}
printf("%d\n", GetTickCount() - t1);
system("pause");
}
计算时间的方法其实都不精确,它得到的是程序从一个地方运行到另一个地方所间隔的时间,但是这段间隔时间并不一定全都用于程序的计算过程,在这段时间内有可能CPU被其他进程占用了。
另外还有一个高精度的计算方法,是用QueryPerformanceFrequency和QueryPerformanceCounter,要自己用频率和计数算时间。
如果你已经有testbat,则统计运行时间的bat如下:
@echo off
set startime=%time%
call testbat
set endtime=%time%
echo 开始时间%startime%,结束时间%endtime%
call testbat也可以用你在testbat中的内容直接替换。
通过获取系统毫秒数来计算时间GetTickCount在函数开始前和结束后 取两次值求差值。
记录一个起始时间,记录一个结束时间,两个相减就是程序运行时间,代码如下
long start = SystemcurrentTimeMillis(); // 记录起始时间
try {
Threadsleep(5000); // 线程睡眠5秒,让运行时间不那么小
} catch (InterruptedException e) {
eprintStackTrace();
}
long end = SystemcurrentTimeMillis(); // 记录结束时间
Systemoutprintln(end-start); // 相减得出运行时间
得出的单位是毫秒。
获取程序运行时间:
在<timeh>里有函数clock();本身这个函数取得的时间好像是ms,要取得s就
写成clock()/CLOCKS_PER_SEC;但CLOCKS_PER_SEC是在timeh里定义的,如果没这个定义
那只能用clock();取得ms;这个函数的执行不会中途停止,如果是在windows系统下,因为它是
多任务系统,它需要在各任务之间切换,如果在测试过程中,执行其他程序,所其得的时间,就会
出现差别,还有windows运行速度相当快,对于小型的测试,所得的时间几乎为0,因此最好将
要测试的过程执行100次或以上,然后再将取得的时间执行次数;输出非常耗时间,没什么必要
的话,就不要输出
这是一个测试选择排序的程序
#include
<stdioh>
#include
<stdlibh>
#include
<timeh>
#define
M
1000
/
执行次数
/
#define
N
500
/
数组大小
/
void
SelectSort(int
a,int
l,int
r)
{
int
i,j,v;
for
(i=0;i<r;i++)
{
for
(j=i+1;j<=r;j++)
{
if
((a+i)>(a+j))
v=(a+i),(a+i)=(a+j),(a+j)=v;
}
}
}
void
main()
{
int
a[N],i,j;
double
start,finish;
/
开始时间,结束时间
/
start=(double)clock();
/
我的timeh内没有CLOCKS_PER_SEC
/
for
(j=0;j<M;j++)
{
/
执行M次
/
for
(i=0;i<N;(a+i++)=rand()%10);
/
每次重新赋值
/
SelectSort(a,0,N-1);
}
finish=(double)clock();
printf("%4fms",(finish-start)/M);
getchar();
}
以上就是关于怎么知道自己编的c程序的运行时间全部的内容,包括:怎么知道自己编的c程序的运行时间、怎么用bat 统计bat运行的时间、如何统计多线程的执行总时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)