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

Reply via email to