Ce qui se passe quand GetTickCount() enveloppe?

Si un thread est en train de faire quelque chose comme ceci:

const DWORD interval = 20000;
DWORD ticks = GetTickCount();
while(true)
{
    DoTasksThatTakeVariableTime();

    if( GetTickCount() - ticks > interval )
    {
        DoIntervalTasks();
        ticks = GetTickCount();
    }
}

Finalement, les tiques va envelopper lorsque la valeur ne correspond pas à une valeur DWORD.

J'ai discuté avec un collègue. L'un d'entre nous croit que le code se comportent encore 'bien' quand l'écharpe se produit, car la soustraction de l'opération sera également envelopper. L'autre d'entre nous, estime qu'il ne fonctionne pas toujours, surtout si l'intervalle est grand.

Qui de droit, et pourquoi?

Grâce.

Ce que vous êtes vraiment poser est de savoir ce qui se passe lorsque vous soustrayez un grand DWORD de un petit. Vous et votre collègue pourrait ont écrit un programme pour trouver. GetTickCount est pas pertinente pour.
J'ai fait l'expérience avec calc.exe, mis à la mode hex à l'aide dword taille. Et les résultats regardé comme il se comporte bien... cependant, mon collègue n'était pas convaincu que cela fonctionnerait dans tous les cas, donc la question. GetTickCount est pertinente, Jon Skeet déjà souligné, nous pourrions utiliser GetTickCount64 au lieu
GetTickCount64() modifie l'ampleur du problème à l'emballage après quelque chose comme 200 milliards de jours.... êtes-vous sûr que votre code ne s'exécute pas longtemps? 😉

OriginalL'auteur Scott Langham | 2009-04-07