Sovefunktion i c i Windows. Er der en funktion med bedre præcision?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg spekulerede på, om nogen vidste om en bedre søvnfunktion, der kunne bruges i Windows i c, bortset fra Sleep (), som tager en millisekundsindgang og garanterer kun, at input er det minimale antal tid, der forløber. Jeg passerer i 1 millisekund, men får faktisk en forsinkelse på 15-16 millisekunder. Er der nogen måde at præcist indstille en bestemt sove tid?

Bedste reference


Nej ikke rigtigt. Når du fortæller dit program at sove, 'giver du op på processoren og lader operativsystemet afgøre, hvad man skal gøre næste gang. Når operativsystemet er i kontrol, bestemmer det, hvornår programmet skal gives et andet stykke behandlingstid. Det er derfor Du kan angive et minimum, men der er ingen garanti for, at OS'et vil komme tilbage til din proces på et bestemt tidspunkt.

Andre referencer 1


Kig ind i Multimedia Timers. [1]

Andre referencer 2


Sleep garanterer kun, at din proces ikke udføres for i det mindste n millisekunder, ikke at den vil sove nøjagtigt n millisekunder. Måske vil du oprette en timer? Eller optaget ventetid (dvs. poll QueryPerformanceCounter i en loop).


Jeg forsøger at undgå denne fremgangsmåde (travl vent), medmindre du er nødt til selvom du 'brænder cykler, og du' stopper CPU'en fra at blive sat til lavere clockhastigheder (dvs. brændbar batterilevetid)

Andre referencer 3


Nej, der er ikke en bedre søvnfunktion på Windows, fordi millisekunder er niveauet for granularitet til rådighed. Hvis du vil sove mindre tid, skal du implementere en spin-lås af sorter.