博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Windows及Linux下获取毫秒级运行时间的方法
阅读量:6156 次
发布时间:2019-06-21

本文共 2237 字,大约阅读时间需要 7 分钟。

在Windows下获取毫秒级运行时间的方法

  1. 头文件:<Windows.h>
  2. 函数原型:
    /*获取时钟频率,保存在结构LARGE_INTEGER中***/     WINBASEAPI     BOOL     WINAPI     QueryPerformanceFrequency(     _Out_ LARGE_INTEGER * lpFrequency     );     /*获取从某个时间点开始的时钟周期数,保存在结构LARGE_INTEGER中**/     WINBASEAPI     BOOL     WINAPI     QueryPerformanceFrequency(     _Out_ LARGE_INTEGER * lpFrequency     );
  3.  LARGE_INTEGER结构
    typedef union _LARGE_INTEGER {     struct {     DWORD LowPart;     LONG HighPart;     } DUMMYSTRUCTNAME;     struct {     DWORD LowPart;     LONG HighPart;     } u;     #endif //MIDL_PASS     LONGLONG QuadPart;     } LARGE_INTEGER;

    LARGE_INTEGER为一个union,我们将使用成员QuadPart获取时钟周期数。

  4. 方法:

    1) 调用QueryPerformanceFrequency()获取时钟频率

    2) 在待测部分的首尾分别调用QueryPerformanceCounter()获取两个时间点的时钟周期数

    3) 将两个节点的时钟周期数差值除以时钟频率即可得到测试部分的运行时间

    参考代码:

#include 
#include
#include
#include
#define SIZE 100using namespace std;int a[SIZE];int b[SIZE];int c[SIZE];int main(){//srand(time(0));for (int i = 0; i < SIZE; ++i){a[i] = rand();b[i] = rand();}LARGE_INTEGER begain, end, frequency;QueryPerformanceFrequency(&frequency);QueryPerformanceCounter(&begain);#pragma omp parallel forfor (int i = 0; i < SIZE; ++i){c[i] = a[i] * b[i];}QueryPerformanceCounter(&end);cout << "Cost time : " << (double)(end.QuadPart - begain.QuadPart) * 1000 / frequency.QuadPart << "ms" << endl;cout << begain.QuadPart << endl;}
View Code

在Linux下获取毫秒级运行时间的方法

  1. 头文件<sys/time.h> 
  2. 函数原型:
    int gettimeofday(struct timeval *tv, struct timezone *tz);     struct timeval {     time_t tv_sec; /* seconds */     suseconds_t tv_usec; /* microseconds */     };

    参考代码:

#include 
#include
#include
int main(){ struct timeval _tstart, _tend; double t1, t2; gettimeofday(&_tstart, NULL); // ToDo.. gettimeofday(&_tend, NULL); t1 = (double)_tstart.tv_sec * 1000 + (double)_tstart.tv_usec / 1000; t2 = (double)_tend.tv_sec * 1000 + (double)_tend.tv_usec / 1000; printf("Cost time : %fms\n", t2 - t1); return 0;}
View Code

 参考资料:http://www.ibm.com/developerworks/cn/linux/sdk/rt/part1/index.html

转载于:https://www.cnblogs.com/chensu/p/5483594.html

你可能感兴趣的文章
SpringMVC实战(注解)
查看>>
关于静态属性和静态函数
查看>>
进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
查看>>
spring+jotm+ibatis+mysql实现JTA分布式事务
查看>>
MyBatis启动:MapperStatement创建
查看>>
调查问卷相关
查看>>
eclipse启动无响应,老是加载不了revert resources,或停留在Loading workbench状态
查看>>
1. Git-2.12.0-64-bit .exe下载
查看>>
怎样关闭“粘滞键”?
查看>>
[转]React 教程
查看>>
拓扑排序介绍
查看>>
eclipse打开工作空间(workspace)没有任务反应
查看>>
使用Sybmol模块来构建神经网络
查看>>
字符串去分割符号
查看>>
WPF中,多key值绑定问题,一个key绑定一个界面上的对象
查看>>
UML类图简明教程
查看>>
java反编译工具(Java Decompiler)
查看>>
Android开发之自定义对话框
查看>>
微信Access Token 缓存方法
查看>>
Eclipsed的SVN插件不能识别之前工作空间的项目
查看>>