Maison  >  Article  >  développement back-end  >  Pourquoi l’appel de fonction WinAPI Sleep() dépasse-t-il parfois la durée prévue ?

Pourquoi l’appel de fonction WinAPI Sleep() dépasse-t-il parfois la durée prévue ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 22:02:02368parcourir

Why Does WinAPI Sleep() Function Call Sometimes Exceed the Expected Duration?

Durée inattendue de l'appel de fonction WinAPI Sleep()

La fonction WinAPI Sleep() est utilisée pour suspendre l'exécution d'un thread pendant un durée spécifiée. Cependant, dans certains cas, il a été observé que la période de veille dépasse la valeur prévue.

Sous Windows 7, l'appel de Sleep(1) peut entraîner un délai d'environ 15 ms au lieu de 1 ms attendu. Cela a été vérifié en exécutant une boucle de 100 appels Sleep(1) et en observant un temps de sommeil total de 1 500 ms.

Comportement attendu

Il est important de noter que cette extension de durée est un comportement typique du système d'exploitation Windows. Le planificateur de threads fonctionne sur des quanta de temps, qui sont des intervalles de temps prédéfinis. Toute demande de délai non nul est ajustée au quantum complet le plus proche.

Par conséquent, la période de sommeil est élevée au quantum de temps le plus proche, qui dans ce cas est de 15 ms.

Dépendance sur les facteurs externes

La durée de la période de sommeil peut également être influencée par la résolution de la minuterie à l'échelle du système. Par défaut, Windows 7 définit cette résolution sur 15,6 ms. Cependant, d'autres programmes ou configurations système peuvent modifier ce paramètre, entraînant des résolutions de minuterie inférieures (par exemple, 1 ms).

Dans de tels scénarios, les appels Sleep(1) peuvent connaître des durées de veille plus courtes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn