C语言中有没有一种计时函数,能算出从程序中某段代码运行所花的时间?
5个回答
展开全部
C语言中有计时函数算时间,difftime,具体可以看一下<time.h>,这是标准C语言的头文件。
但注意这几件事,
1. 如果你是用单片机的嵌入式系统,time.h 中 涉及的几个函数很可能系统并没有实现,换句话说,嵌入式系统的时间处理可能不好用!因为嵌入式的系统一般来说不是标准系统。
2. 要统计算法的运行时间效率,单纯用计时的方法是很片面的。比如在windows下写两个程序,一个运行1秒,另一个运行2秒,并不能证明算法1的效率一定高于算法2。因为windows是典型的多任务系统,算法1可能花费了系统100%的资源处理了1秒,而算法2可能只花费了10%的资源处理了2秒。所以,计时的结果可以供参考,但不全面。通常评价算法的效率,还是要从算法本身来分析的。
但注意这几件事,
1. 如果你是用单片机的嵌入式系统,time.h 中 涉及的几个函数很可能系统并没有实现,换句话说,嵌入式系统的时间处理可能不好用!因为嵌入式的系统一般来说不是标准系统。
2. 要统计算法的运行时间效率,单纯用计时的方法是很片面的。比如在windows下写两个程序,一个运行1秒,另一个运行2秒,并不能证明算法1的效率一定高于算法2。因为windows是典型的多任务系统,算法1可能花费了系统100%的资源处理了1秒,而算法2可能只花费了10%的资源处理了2秒。所以,计时的结果可以供参考,但不全面。通常评价算法的效率,还是要从算法本身来分析的。
展开全部
你可以在运行前获取一下系统时间,运行后再获取一下系统时间,来比较两次时间中间的差。
一般精度到秒的就用C标准的time函数就好,如果是需要到毫秒的,可以尝试使用clock函数,也是C标准库里的
如果需要更高精度到纳秒级别的,在Windows下可以尝试
QueryPerformanceFrequency和QueryPerformanceCounter这两个函数
一般精度到秒的就用C标准的time函数就好,如果是需要到毫秒的,可以尝试使用clock函数,也是C标准库里的
如果需要更高精度到纳秒级别的,在Windows下可以尝试
QueryPerformanceFrequency和QueryPerformanceCounter这两个函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以直接在函数的算法开始和结束处,加个打印语句,打印时间的,当然用gettimeofday()函数可以精确些 可参照 http://baike.baidu.com/view/1516611.htm 中clock()函数, 而 gettimeofday是linux系统下
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(1) 用 clock();
例如 调用 void example_dt_ms() 程序 代替 wait_ms(2000); 语句,插入 //prog here
(2)用 QueryPerformanceCounter()
例如 调用 void accurate_dt_ms() 程序 代替 wait_ms(2000); 语句,插入 //prog here
程序和头文件如下:
#define NOMINMAX
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void wait_ms ( int ms )
{
clock_t endwait;
endwait = clock () + ms;
while (clock() < endwait) {}
}
void example_dt_ms()
{
clock_t tick1,tick2;
int i,j,k;
double dt;
tick1=clock(); //ms
//prog here
//for (i=0;i<1000;i++) for (j=0;j<1000;j++) for (k=0;k<100;k++) {};
wait_ms(2000);
tick2=clock();
dt = (double) (tick2 - tick1);
printf("==============\nexample_dt_ms:\n");
printf("dt = %lf ms\n",dt);
}
void accurate_dt_ms()
{
LARGE_INTEGER nFreq;
LARGE_INTEGER nBeginTime;
LARGE_INTEGER nEndTime;
int executionTime;
double dt,d_freq,d_begin_t,d_end_t;
// Start of time interval
QueryPerformanceFrequency(&nFreq);
d_freq = (double) nFreq.QuadPart;
QueryPerformanceCounter(&nBeginTime);
// ----------
// prog here Any code
// ...
wait_ms(2000);
// End of time interval
// -----------
QueryPerformanceCounter(&nEndTime);
// time interval in ms
executionTime = (nEndTime.QuadPart - nBeginTime.QuadPart) * 1000 / nFreq.QuadPart;
dt = (double) ((nEndTime.QuadPart - nBeginTime.QuadPart) * 1000) / d_freq;
printf("==============\naccurate_dt_ms:\n");
printf("dt=%d in ms or dt=%lf ms\n", executionTime,dt);
}
main()
{
accurate_dt_ms();
}
例如 调用 void example_dt_ms() 程序 代替 wait_ms(2000); 语句,插入 //prog here
(2)用 QueryPerformanceCounter()
例如 调用 void accurate_dt_ms() 程序 代替 wait_ms(2000); 语句,插入 //prog here
程序和头文件如下:
#define NOMINMAX
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void wait_ms ( int ms )
{
clock_t endwait;
endwait = clock () + ms;
while (clock() < endwait) {}
}
void example_dt_ms()
{
clock_t tick1,tick2;
int i,j,k;
double dt;
tick1=clock(); //ms
//prog here
//for (i=0;i<1000;i++) for (j=0;j<1000;j++) for (k=0;k<100;k++) {};
wait_ms(2000);
tick2=clock();
dt = (double) (tick2 - tick1);
printf("==============\nexample_dt_ms:\n");
printf("dt = %lf ms\n",dt);
}
void accurate_dt_ms()
{
LARGE_INTEGER nFreq;
LARGE_INTEGER nBeginTime;
LARGE_INTEGER nEndTime;
int executionTime;
double dt,d_freq,d_begin_t,d_end_t;
// Start of time interval
QueryPerformanceFrequency(&nFreq);
d_freq = (double) nFreq.QuadPart;
QueryPerformanceCounter(&nBeginTime);
// ----------
// prog here Any code
// ...
wait_ms(2000);
// End of time interval
// -----------
QueryPerformanceCounter(&nEndTime);
// time interval in ms
executionTime = (nEndTime.QuadPart - nBeginTime.QuadPart) * 1000 / nFreq.QuadPart;
dt = (double) ((nEndTime.QuadPart - nBeginTime.QuadPart) * 1000) / d_freq;
printf("==============\naccurate_dt_ms:\n");
printf("dt=%d in ms or dt=%lf ms\n", executionTime,dt);
}
main()
{
accurate_dt_ms();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询