Am 03.11.2011 18:15, schrieb Hans-Peter Diettrich:
zeljko schrieb:
This is what MSDN says about GetTickCount:
Retrieves the number of milliseconds that have elapsed since the
system was started, up to 49.7 days (what they do after 49.7 days ? ).
When the DWORD overflows, Win9x stops to work properly. NT uses an
bigger data type, at least internally.
It's basically a 64-bit type now. Here's ReactOS' implementation of
GetTickCount64 (which is called by GetTickCount):
=== source begin ===
ULONGLONG
WINAPI
GetTickCount64(VOID)
{
ULONG Multiplier;
LARGE_INTEGER TickCount;
/* Loop until we get a perfect match */
for (;;)
{
/* Read the tick count value */
TickCount.HighPart = SharedUserData->TickCount.High1Time;
TickCount.LowPart = SharedUserData->TickCount.LowPart;
if (TickCount.HighPart == SharedUserData->TickCount.High2Time)
break;
YieldProcessor();
}
/* Get the multiplier */
Multiplier = SharedUserData->TickCountMultiplier;
/* Convert to milliseconds and return */
return (Int64ShrlMod32(UInt32x32To64(Multiplier,
TickCount.LowPart), 24) +
(Multiplier * (TickCount.HighPart << 8)));
}
=== source end ===
You notice the loop regarding SharedUserData again? ;) (though this time
it also contains a call to "YieldProcessor" and a comment regarding the
loop)
By the way: the TickCount field (and also the SystemTime one) is a
KSYSTEM_TIME struct which is defined like the following (copied from my
port):
=== source begin ===
//
// System Time Structure
//
_KSYSTEM_TIME = packed record
LowPart: ULONG;
High1Time: LONG;
High2Time: LONG;
end;
KSYSTEM_TIME = _KSYSTEM_TIME;
PKSYSTEM_TIME = ^KSYSTEM_TIME;
=== source end ===
Regards,
Sven
_______________________________________________
fpc-devel maillist - fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel