读书人

在win32控制台程序中 怎么精确到1毫秒

发布时间: 2012-02-23 22:01:35 作者: rapoo

在win32控制台程序中 如何精确到1毫秒级呢?
我用clock()但似乎不起作用


[解决办法]
如何精确计算出算法的CPU运行时间

GetTickCount可以到18-20ms进度
timeGetTime可以到1ms精度

当然这些都不是C或是C++标准支持的。

直接读取CPU开机以来执行的机器周期数,一条汇编指令:RDTSC (就是ReaD TimeStamp Count)精度可以达到ns级别。(准确地说精度是1/你的CPU的时钟频率,这也是极限)

long HighStart,LowStart,HighEnd,LowEnd;
long numhigh,numlow;

__asm
{
RDTSC
mov HighStart,edx
mov LowStart,eax
}
//此处放上代码
__asm
{
RDTSC
mov HighEnd,edx
mov LowEnd,eax
//获取两次计数器值得差
sub eax,LowStart
cmp eax,0
jg L1
neg eax
jmp L2

L1: mov numlow,eax
L2: sbb edx,HighStart
mov numhigh,edx
}

unsigned long timer = (numhigh < <32)+numlow; //得出最终结果
timer所得数精确到ns
[解决办法]
to :Kenmark(fenix)

//获取两次计数器值得差
sub eax,LowStart
cmp eax,0
jg L1
neg eax
jmp L2 // 这里的jmp L2是不是会出问题?//

L1: mov numlow,eax
L2: sbb edx,HighStart
mov numhigh,edx

[解决办法]
QueryPerformanceFrequency 获取频率
QueryPerformanceCounter 获取次数
这两个函数结合起来精确度很高
具体可以上网搜下

读书人网 >C语言

热点推荐