当前位置: 首页 > news >正文

C语言使用技巧(三十):计算程序运行时间以及自带的函数库calcElapsed(startTime, now())

demo实现:

///* 测量2个事件持续的时间 */  
#include  <stdio.h>
#include  <stdlib.h>
#include  <time.h>  

// // #include<ctime>
// /*测试排序算法运行时间  c++*/
// void testSort(void(*sort)(int[], int), int arr[], int length)
// {
//     clock_t startTime = clock();
//     sort(arr, length);
//     clock_t endTime = clock();
//     // printf(double(endTime - startTime) / CLOCKS_PER_SEC,"s")
// }
// /*插入排序*/
// void insertionSort(int arr[], int n)
// {
//     for (int i = 1; i < n; i++)
//     {
//         int e = arr[i];
//         int j;
//         for (j = i; j >0 && e < arr[j - 1]; j--)
//             arr[j] = arr[j - 1];
//         arr[j] = e;
//     }

// }

//c语言实现
int  main(  void  ) 
{ 
    // /*    程序1:  调用函数计算程序时间            */
    // int arrSize = 10000;
    // int *arr = new int[arrSize];
    // for (int i = 0; i < arrSize; i++)
    // {
    //     arr[i] = rand() % arrSize;
    // }
    // testSort(insertionSort, arr, arrSize);//另一个程序


    /*    程序2:  主函数内循环事件的程序运行时间       */

    long  i  =   10000000L ; //表明这个数是long int类型。
    clock_t start, end; 
    double  duration; 
     /*  测量2个事件持续的时间 */  
    printf(  " Time to do %ld empty loops is  " , i ); 
    
    start  =  clock(); //函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数
    while ( i --  ) ;                   //第srand(time(NULL));
    end  =  clock(); 

    duration  =  ( double )(end  -  start)  /  CLOCKS_PER_SEC; 
    //CLOCKS_PER_SEC表示一秒钟内CPU运行的时钟周期数(时钟计时单元
    printf(  " %f seconds\n " , duration ); 
    // system( " pause " ); 
    return 0;
} 

执行结果:

gcc readtxt.c -o readtxt && ./readtxt
 Time to do 10000000 empty loops is   0.003350 seconds



time.h头文件:


#include <stdint.h>

#if   defined(__APPLE__)
# include <mach/mach_time.h>
#elif defined(_WIN32)
# define WIN32_LEAN_AND_MEAN

# include <windows.h>

#else // __linux

# include <time.h>

# ifndef  CLOCK_MONOTONIC //_RAW
#  define CLOCK_MONOTONIC CLOCK_REALTIME
# endif
#endif

static
uint64_t nanotimer() {
    static int ever = 0;
#if defined(__APPLE__)
    static mach_timebase_info_data_t frequency;
    if (!ever) {
        if (mach_timebase_info(&frequency) != KERN_SUCCESS) {
            return 0;
        }
        ever = 1;
    }
    return  (mach_absolute_time() * frequency.numer / frequency.denom);
#elif defined(_WIN32)
    static LARGE_INTEGER frequency;
    if (!ever) {
        QueryPerformanceFrequency(&frequency);
        ever = 1;
    }
    LARGE_INTEGER t;
    QueryPerformanceCounter(&t);
    return (t.QuadPart * (uint64_t) 1e9) / frequency.QuadPart;
#else // __linux
    struct timespec t;
    if (!ever) {
        if (clock_gettime(CLOCK_MONOTONIC, &t) != 0) {
            return 0;
        }
        ever = 1;
    }
    clock_gettime(CLOCK_MONOTONIC, &t);
    return (t.tv_sec * (uint64_t) 1e9) + t.tv_nsec;
#endif
}


static double now() {
    static uint64_t epoch = 0;
    if (!epoch) {
        epoch = nanotimer();
    }
    return (nanotimer() - epoch) / 1e9;
};

double calcElapsed(double start, double end) {
    double took = -start;
    return took + end;
}

时间计算函数为:

double calcElapsed(double start, double end) {
    double took = -start;
    return took + end;
}

使用方法:

double startTime = now();//当前时间
nsProcess(inBuffer, sampleRate, inSampleCount, channels, kModerate);
double time_interval = calcElapsed(startTime, now());//结束计算时间的位置

参考:https://m.php.cn/manual/view/34332.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 桌面端的移动计算(四)
  • C/C++音频算法: noise suppression算法及技术资料汇总
  • 经济观察报:新浪打造网络新闻的工业化实验
  • AI模型设计:C++实现深度学习神经网络模型及源码分享
  • C语言使用技巧(三十一):回顾strlen函数简单使用
  • 导航界面
  • python使用技巧(二十七):音频WAV和PCM的互相转换
  • Java学习备忘录(一)安装篇(原创)
  • C语言使用技巧(三十二):读写txt文件指定行指定所有行类型数据
  • AI模型设计:安装C++版本的libtensorflow(1.10~2.6.0)以及TFC++ demo源码的实现
  • 酒店管理(链表和文件操作)
  • AI模型设计:配置C++版本pytorch(libtorch 1.12)开发环境以及demo源码的实现
  • 2004年6月22日
  • ubuntu20.04安装Android Studio
  • C/C++使用技巧(二十二):再谈C/C++多文件编译生成与调用的静态库/动态库[本文所有源码分享]
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • Codepen 每日精选(2018-3-25)
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Fastjson的基本使用方法大全
  • uva 10370 Above Average
  • 阿里云应用高可用服务公测发布
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 初识MongoDB分片
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 首页查询功能的一次实现过程
  • 跳前端坑前,先看看这个!!
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 怎么将电脑中的声音录制成WAV格式
  • 智能网联汽车信息安全
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​香农与信息论三大定律
  • !!java web学习笔记(一到五)
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #define
  • $.ajax中的eval及dataType
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (二)换源+apt-get基础配置+搜狗拼音
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计ssm电影分享网站
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (六)c52学习之旅-独立按键
  • (四) Graphivz 颜色选择
  • (算法)求1到1亿间的质数或素数
  • (五)网络优化与超参数选择--九五小庞
  • (转)nsfocus-绿盟科技笔试题目
  • (转)用.Net的File控件上传文件的解决方案
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .Net core 6.0 升8.0
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...