在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 获取次数
这两个函数结合起来精确度很高
具体可以上网搜下