опубликован 08-11-2001 07:23 MSK
смотри RDTSCпример функции (я ее для кваки писал)
точность=пара десятков тиков проца
/*
================
Sys_DoubleTime
================
*/
//rm mod
double Sys_DoubleTime (void)
{
double t;
static int starttime;
static int bTimeInit=false;
static __int64 frequency;
static __int64 starttick;
__int64 tick;
if (!bTimeInit)
{
struct _timeb tstruct;
DWORD stck,etck;
__int64 stckL,etckL;
_ftime( &tstruct );
starttime = tstruct.time;
_asm {
rdtsc
lea ebx,starttick
mov [ebx],eax
mov [ebx+4],edx
}
stck=GetTickCount()+2;
etck=stck+5000;
while (GetTickCount()<stck) ;
_asm {
rdtsc
lea ebx,stckL
mov [ebx],eax
mov [ebx+4],edx
}
Sleep(4900);
while (GetTickCount()<etck) ;
_asm {
rdtsc
lea ebx,etckL
mov [ebx],eax
mov [ebx+4],edx
}
frequency=(etckL-stckL)/5;
bTimeInit=true;
}
_asm {
rdtsc
lea ebx,tick
mov [ebx],eax
mov [ebx+4],edx
}
t=starttime;
t+=(1.0*(tick-starttick))/(1.0*frequency);
return t;
}