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

在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 <iostream>
#include <ctime>
#include <cstdlib>
#include <Windows.h>
#define SIZE 100
using 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 for
for (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;
}

在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 <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
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;
}

时间: 2024-10-13 23:59:57

在Windows及Linux下获取毫秒级运行时间的方法的相关文章

如何在windows下和linux下获取文件(如exe文件)的详细信息和属性

程序员都很懒,你懂的! 最近在项目开发中,由cs开发的exe的程序,需要自动升级,该exe程序放在linux下,自动升级时检测不到该exe程序的版本号信息,但是我们客户端的exe程序需要获取服务器上新程序的版本号信息.最后由我用java实现linux上exe文件的版本号读取功能.下面是详细代码: package com.herman.utils; import java.io.File; import java.io.FileNotFoundException; import java.io.I

Windows和Linux下获取当前可执行文件路径和工作目录

1.Windows下的获取当前可执行文件的路径和当前工程目录. (1)获取当前可执行文件路径: #include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") wchar_t szExePath[MAX_PATH] = {0}; GetModuleFileNameW(NULL, szExePath, sizeof(szExePath)); PathRemoveFileSpecW(szExePath); (2)如果想获取当前工

Linux 下产生毫秒级随机数方法

本来产生随机数使用srand((unsigned)time(NULL));data=rand();就可以了,但是发现如果在很短的时间(其实rand是秒级的)会发现产生的随机相等,所以想找可以产生毫秒级随机数产生方法,最后上网搜了一下.建议再用linux产生随机数时,最好用 struct timeval tv; gettimeofday(&tv, NULL); srand(tv.tv_sec + tv.tv_usec + getpid()); 头文件: #include <unistd.h&g

Windows访问Linux下的共享目录的配置方法

user安全级别 第一步:安装samba3(如果已经安装就跳过这一步) [[email protected] /]# yum groupinstall "CIFS file server" 第二步:修改配置文件 [[email protected] /]# vi /etc/samba/smb.conf 将security参数的值设为user(这是默认值) security = user 第三步:创建可以访问共享目录的用户 [[email protected] test]# userad

windows和linux下获取当前程序路径以及cpu数

[cpp] view plaincopy #ifdef WIN32 #include <Windows.h> #else #include <stdio.h> #include <unistd.h> #endif #include <assert.h> std::string getCurrentAppPath() { #ifdef WIN32 char path[MAX_PATH + 1] = {0}; if (GetModuleFileName(NULL

Linux下获取设备pci ID的方法

有的时候,开发时需要用到设备的pci ID,如用dpdk来绑定某个网卡,需要用网卡的pci ID.下面有一些方法是可以获取pci ID的. 1.使用lspci命令. 如 02:00.0 USB controller: Intel Corporation 82371AB/EB/MB PIIX4 USB 02:01.0 Ethernet controller: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) (rev 01

linux下获取随机数的6种方法

方法1.通过系统变量echo $RANDOM echo $RANDOM|md5sum |cut -c 1-8 方法2.openssl rand -base64 8 openssl rand -base64 8|cut -c 1-8 方法3.通过时间获得随机数date +%s%N date +%s%N|md5sum 方法4.head /dev/urandom |cksum head /dev/urandom |cksum|md5sum 方法5.cat /proc/sys/kernel/random

windows和linux下如何远程获取操作系统版本和主机名

远程获取windows和linux操作系统版本和主机名需要具备以下条件: 假设 主机A(windows 7),ip:192.168.12.2 主机B(centos 6.3),ip:192.168.12.3 主机C(windows 2008)-为远程要获取信息的主机,ip:192.168.12.4 主机D(centos 6.3)-为远程要获取信息的主机,ip:192.168.12.5 windows: 1.主机A可以ping通主机C: 2.主机B可以ping通主机C: 3.主机B可以通过161端口

socket在windows下和linux下的区别

windows到Linux代码移植遇到的问题 1.一些常用函数的移植 http://www.vckbase.com/document/viewdoc/?id=1586 2.网络 ------ 转载 & 修改(待整理) socket相关程序从windows移植到linux下需要注意的 1)头文件 windows下winsock.h/winsock2.h linux下sys/socket.h 错误处理:errno.h 2)初始化 windows下需要用WSAStartup linux下不需要 3)关