Kom ihåg att funktionerna Sleep(DWORD dwMilliseconds) och SleepEx(DWORD dwMilliseconds)
är funktioner som överlämnar kontrollen til taskschedulern i Windows enkelt uttryckt.
https://docs.microsoft.com/en-us/win...synchapi-sleep
Windows får därmed överta den timeslice din applikation/program/tråd/process i schedulern, och göra vad den vill med den.
I regel så kollar då Windows sin WM_MESSAGE-kö och betar av den.
Ett värde på noll (0) på dwMilliseconds innebär att programmet tillfälligt släpper kontrollen kortaste möjliga timeslice.
Men storleken på den kan variera från körning till körning beroende på aktuell CPU-load, beroende på hur många processer som körs, mm. .
Funktionen delay() har nästan samma funktion men är inte del av Windows funktionsutbud.
Som sagt så används Sleep() och SleepEx() ofta i samband med att ditt program kommunicerar mot intern eller extern hårdvara, och att man vet att hårdvaran tar en viss tid på sig att utföra kommandot.
Det finns/fanns också i exempelkod för tex Lab-kort, för att undvika för tät pollning av att läsa något realtidsvärde, som ändå inte ändras på kanske x millisekunder. Detta brukar finnas nämnt i manualer för sådana kort
Man undviker med Sleep() därmed att ditt program i onödan käkar upp CPU-cykler som det inte behöver.
Och sänker programmets begov av CPU-cykler, och sänker CPU-loaden.
Sleep och SleepEx används ofta också för att underlätta synkning mellan tex trådar eller processer.