Windows 7 funciones de temporización - ¿Cómo usar GetSystemTimeAdjustment correctamente?

Realicé algunas pruebas usando laGetSystemTimeAdjustment funcionó en Windows 7, y obtuve algunos resultados interesantes que no puedo explicar. Según tengo entendido, este método debería volver si la hora del sistema se sincroniza periódicamente y, si es así, en qué intervalo y con qué incremento se actualiza ver función GetSystemTimeAdjustment en MSDN).

Desde esto, sigo que si consulto la hora del sistema, por ejemplo, usandoGetSystemTimeAsFileTime repetidamente no debería recibir ningún cambio (el reloj del sistema no se ha actualizado) o un cambio que es un múltiplo del incremento recuperado porGetSystemTimeAdjustment. Pregunta uno ¿Es correcta esta suposición?

Ahora considere el siguiente código de prueba:

#include <windows.h>
#include <iostream>
#include <iomanip>

int main()
{
    FILETIME fileStart;
    GetSystemTimeAsFileTime(&fileStart);
    ULARGE_INTEGER start;
    start.HighPart = fileStart.dwHighDateTime;
    start.LowPart = fileStart.dwLowDateTime;

    for (int i=20; i>0; --i)
    {
        FILETIME timeStamp1;
        ULARGE_INTEGER ts1;

        GetSystemTimeAsFileTime(&timeStamp1);

        ts1.HighPart = timeStamp1.dwHighDateTime;
        ts1.LowPart  = timeStamp1.dwLowDateTime;

        std::cout << "Timestamp: " << std::setprecision(20) << (double)(ts1.QuadPart - start.QuadPart) / 10000000 << std::endl;

    }

    DWORD dwTimeAdjustment = 0, dwTimeIncrement = 0, dwClockTick;
    BOOL fAdjustmentDisabled = TRUE;
    GetSystemTimeAdjustment(&dwTimeAdjustment, &dwTimeIncrement, &fAdjustmentDisabled);

    std::cout << "\nTime Adjustment disabled: " << fAdjustmentDisabled
        << "\nTime Adjustment: " << (double)dwTimeAdjustment/10000000
        << "\nTime Increment: " << (double)dwTimeIncrement/10000000 << std::endl;

}

Toma 20 marcas de tiempo en un bucle y las imprime en la consola. Al final, imprime el incremento con el que se actualiza el reloj del sistema. Esperaría que las diferencias entre las marcas de tiempo impresas en el bucle sean 0 o múltiplos de este incremento. Sin embargo, obtengo resultados como este:

Timestamp: 0
Timestamp: 0.0025000000000000001
Timestamp: 0.0074999999999999997
Timestamp: 0.01
Timestamp: 0.012500000000000001
Timestamp: 0.014999999999999999
Timestamp: 0.017500000000000002
Timestamp: 0.022499999999999999
Timestamp: 0.025000000000000001
Timestamp: 0.0275
Timestamp: 0.029999999999999999
Timestamp: 0.032500000000000001
Timestamp: 0.035000000000000003
Timestamp: 0.040000000000000001
Timestamp: 0.042500000000000003
Timestamp: 0.044999999999999998
Timestamp: 0.050000000000000003
Timestamp: 0.052499999999999998
Timestamp: 0.055
Timestamp: 0.057500000000000002

Time Adjustment disabled: 0
Time Adjustment: 0.0156001
Time Increment: 0.0156001

Por lo tanto, parece que la hora del sistema se actualiza utilizando un intervalo de aproximadamente 0.0025 segundos y no 0.0156 segundos como retorno deGetSystemTimeAdjustment.

Pregunta dos: ¿Cuál es la razón para esto

Respuestas a la pregunta(3)

Su respuesta a la pregunta