首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-02-23 
在win32控制台程序中 如何精确到1毫秒级呢?我用clock()但似乎不起作用 [解决办法]如何精确计算出算法的CPU

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

热点排行