精确计时MSVC

硬件内部计时器精度 US级别

#include<iostream>
#include "functional"
#include "windows.h"
using namespace std;

#include <WinBase.h>  

long long calculateMS(std::function<void()> processFunc)
{
	long long _value;
	LARGE_INTEGER freq, _start, _end;
	QueryPerformanceFrequency(&freq);
	QueryPerformanceCounter(&_start);

	processFunc();

	QueryPerformanceCounter(&_end);
	_value = (_end.QuadPart - _start.QuadPart) * 1000 / freq.QuadPart;

	return _value;
}

long long calculateUS(std::function<void()> processFunc)
{
	long long _value;
	LARGE_INTEGER freq, _start, _end;
	QueryPerformanceFrequency(&freq);
	QueryPerformanceCounter(&_start);

	processFunc();

	QueryPerformanceCounter(&_end);
	_value = (_end.QuadPart - _start.QuadPart) *1000*1000 / freq.QuadPart;

	return _value;
}

int main(int argc, char *argv[])
{
	printf("%d us\r\n\n", calculateUS([=]()
	{
		int a[9999];
		for (int i = 0; i != 9999; i++)
		{
			a[i] = i;

		}
	}));

	system("pause");
	return 0;
}
时间: 2024-12-27 22:12:02

精确计时MSVC的相关文章

C#中精确计时的一点收获

以下所有代码运行环境:Windows 2003, Intel(R) Core(TM) 2 Duo CPU E8400 @ 3.00GHz 2.99GHz,2.96GB内存 根据综合网上的一些文章,精确计时主要有以下几种方式 1 调用WIN API中的GetTickCount [DllImport("kernel32")]static extern uint GetTickCount(); 从操作系统启动到现在所经过的毫秒数,精度为1毫秒,经简单测试发现其实误差在大约在15ms左右 缺点

windows下的C/C++精确计时

由于我要测试线性筛法的速度,用上了C/C++精确计时.此时传统的clock()方法不够用了,我们需要另一种测量的办法,即CPUTicks/CPUFreq.如何实现呢? #include <windows.h> LARGE_INTEGER freq,start,stop; QueryPerformanceFrequency(&freq); QueryPerformanceCounter(&start); //这样便得到一个CPUTick //do some stuff.... Q

Linux_arm驱动之按键模拟脉冲实现定时器的精确计时

http://wenku.baidu.com/link?url=-9_IHk-7BFRSAxPAeutaQ8Ifhs0Rs9Qg3yAG9LxsqYqRauQRBwjVJ_xnmQ6R-CKbwVDSVmbr4vDJcDyUpbj_Y2RD75J1iLjQonsHywjECRW [cpp] view plaincopy /***************************************************************** 内核驱动部分button_ker.c ***

Window中C++进行精确计时的方法

嗯,程序员一个永恒的追求就是性能吧? 为了衡量性能,自然需要计时. 奈何无论C标准库还是C++标准库,因为通用性的考虑,其time API精度都不高.基本都是毫秒级的. 所以如果要真正精确地衡量程序的性能,还是得靠系统API.下面的计时方式可以精确到<1us. 如果不想了解什么原理,可以直接拷走下面这个简易计时器类.放在一个头文件里,用的时候Include一下就行. #include<windows.h> class MyTimer { private: LARGE_INTEGER _f

Delphi使用TStopwatch计时器精确计时

引用 System.Diagnostics 单元 属性: Elapsed 获取当前实例测量得出的总运行时间. ElapsedMilliseconds  获取当前实例测量得出的总运行时间(以毫秒为单位). ElapsedTicks  获取当前实例测量得出的总运行时间(用计时器计时周期表示). IsRunning   获取一个指示 Stopwatch 计时器是否在运行的值. 方法 GetTimestamp 获取计时器机制中的当前最小时间单位数. Reset  停止时间间隔测量,并将运行时间重置为零.

c++实现精确计时

//获取比较准确是程序运行时间 #include<iostream> #include<windows.h> using namespace std; int main(void) { system("color F0"); cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(10); //获取时钟频率 LARGE_INTEGER m_liPerfFreq={0}; QueryPerf

精确获取时间(QueryPerformanceCounter)

LARGE_INTEGER tima,timb; QueryPerformanceCounter(&tima); 在 Windows Server 2003 和 WindowsXP 中使用 QueryPerformanceCounter 函数的程序可能执行不当 QueryPerformanceCounter 來精確計算執行時間QueryPerformanceCounter 來精確計算執行時間// 這個程式展示了如何使用QueryPerformanceCounter 來精確計算執行時間//代码 1

Linux用户态程序计时方式详解

前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确测量程序的运行时间并不容易,因为进程切换.中断.共享的多用户.网络流量.高速缓存访问及转移预测等因素都会对程序计时产生影响. 本文将不考虑这些影响因素(相关资料可参考<深入理解计算机系统>一书),而仅仅关注Linux系统中用户态程序执行时间的计算方式.除本文所述计时方式外,还可借助外部工具统计耗时,如<Linux调试分析诊断利器——strace>一文中介绍的strace. 本文示例代码的运行环

Linux用户态程序计时方式详解[转]

转自: http://www.cnblogs.com/clover-toeic/p/3845210.html 前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确测量程序的运行时间并不容易,因为进程切换.中断.共享的多用户.网络流量.高速缓存访问及转移预测等因素都会对程序计时产生影响. 本文将不考虑这些影响因素(相关资料可参考<深入理解计算机系统>一书),而仅仅关注Linux系统中用户态程序执行时间的计算方式.除本文所述计时方式外,还可借助外部工具统计耗时