设计一个简单的程序,有两个button,分别点击button1和button2,计算两次点击的时间差,要求精确到微秒,所以使用QueryPerformanceCounter和QueryPerformanceFrequency这两个函数。程序代码如下:
void CMy0509Dlg::OnButton1()
{
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&start);
}void CMy0509Dlg::OnButton2()
{
LARGE_INTEGER TMP;
QueryPerformanceCounter(&stop);
TMP.QuadPart=(stop.QuadPart-start.QuadPart);
m_start=(double)start.QuadPart;
m_stop=(double)stop.QuadPart;
m_frequency=(double)frequency.QuadPart;
m_interval=(double)(TMP.QuadPart/frequency.QuadPart);
UpdateData(false);
}在界面上显示两次的时间和频率,还有时间差。可是测试结果根本不对,是一个无规律的数。在网上看了很多使用这个函数的例子,和我的这个好像也没有什么差别。请高手帮忙看看是哪里出了问题。
测试的一次结果如下:
start:201799951176606
stop:201847198158895
interval:46663
frequency:1012500
frequency倒是 很准,,每次都是这个数。
void CMy0509Dlg::OnButton1()
{
QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&start);
}void CMy0509Dlg::OnButton2()
{
LARGE_INTEGER TMP;
QueryPerformanceCounter(&stop);
TMP.QuadPart=(stop.QuadPart-start.QuadPart);
m_start=(double)start.QuadPart;
m_stop=(double)stop.QuadPart;
m_frequency=(double)frequency.QuadPart;
m_interval=(double)(TMP.QuadPart/frequency.QuadPart);
UpdateData(false);
}在界面上显示两次的时间和频率,还有时间差。可是测试结果根本不对,是一个无规律的数。在网上看了很多使用这个函数的例子,和我的这个好像也没有什么差别。请高手帮忙看看是哪里出了问题。
测试的一次结果如下:
start:201799951176606
stop:201847198158895
interval:46663
frequency:1012500
frequency倒是 很准,,每次都是这个数。
QueryPerformanceCounter()这个函数返回高精确度性能计数器的值,它可以以微妙为单位计时.但是QueryPerformanceCounter()确切的精确计时的最小单位是与系统有关的,所以,必须要查询系统以得到QueryPerformanceCounter()返回的嘀哒声的频率.QueryPerformanceFrequency()提供了这个频率值,返回每秒嘀哒声的个数.计算确切的时间是从第一次调用QueryPerformanceCounter()开始的假设得到的LARGE_INTEGER 为nStartCounter,过一段时间后再次调用该函数结束的,设得到nStopCounter.两者之差除以QueryPerformanceFrequency()的频率就是开始到结束之间的秒数.由于计时函数本身要耗费很少的时间,要减去一个很少的时间开销.但一般都把这个开销忽略.公式如下:
nStopCounter-nStartCounter
ElapsedTime=------------------------------------ - overhead
frequency