C++ 针对Windows Embedded Compact 7的QueryPerformanceCounter()测试

C++ 针对Windows Embedded Compact 7的QueryPerformanceCounter()测试,c++,c,windows,performance,windows-ce,C++,C,Windows,Performance,Windows Ce,循环执行QueryPerformanceCounter()并保存值: // Main loop for timer test for ( int i = 0; i < ITERATIONS; i++ ) // ITERATIONS = 1000 { QueryPerformanceCounter(&li); time[i] = double(li.QuadPart) / PCFreq; //1,193,182 per second } //calculate the

循环执行QueryPerformanceCounter()并保存值:

// Main loop for timer test
for ( int i = 0; i < ITERATIONS; i++ ) // ITERATIONS = 1000
{
    QueryPerformanceCounter(&li);
    time[i] = double(li.QuadPart) / PCFreq; //1,193,182 per second
}
//calculate the difference between each call 
// and save in difference[]
for ( int j = 0; j < (ITERATIONS - 1)  ; j++ )
{
    difference[j] = time[j+1] - time[j];
}
//计时器测试的主循环
对于(int i=0;i
(除以PCFreq给出每次通话之间的时间。)

高分辨率计时器/计数器假定正在工作,因为它没有返回默认频率1000

每个时间戳之间的平均时间为11.990884微秒(1000次时间戳调用)

这似乎非常缓慢

这个测试有缺陷吗


或者关于为什么它在1.1Ghz赛扬上报告如此缓慢的值的想法?

为了不考虑Win 7 Desktop和Embedded Compact 7之间的(潜在)差异,可能需要在第一个循环中消除浮点运算。比如说:

LARGE_INTEGER counter[ITERATIONS];
// Main loop for timer test
for ( int i = 0; i < ITERATIONS; i++ ) // ITERATIONS = 1000
{
    QueryPerformanceCounter(&counter[i]);
}
time[0] = double(counter[0].QuadPart) / PCFreq; //1,193,182 per second
//calculate the difference between each call 
// and save in difference[]
for ( int j = 0; j < (ITERATIONS - 1)  ; j++ )
{
    time[j+1] = double(counter[j+1].QuadPart) / PCFreq; //1,193,182 per second
    difference[j] = time[j+1] - time[j];
}
LARGE_整数计数器[迭代];
//定时器测试主回路
对于(int i=0;i
为什么不使用QueryPerformanceFrequency来验证报告的频率?你到底想验证什么?看起来您只是在计算查询计数器所需的时间,然后进行一些计算。@ctacke:我正在使用它(未显示)获取PCFreq//每秒1193182。是的,我感兴趣的是调用QueryPerformanceCounter的时间有多长,这样我就可以准确地测量其他东西。(+1)。@ctacke:12微秒不是很长吗?我不知道,那是每毫秒80次迭代。我必须看看这个调用去了哪里,如果它必须跳转到内核上,那又是为了什么呢?你想解决的是实际问题吗?@ctacke:嗯,我想知道BSP是否有问题……高精度时间戳调用的速度太慢了。我需要一个正确的设置,希望没有一个实际的问题,我试图解决,但这看起来可疑。