c ++ - Hvordan begrænser cpu-brug fra specifik proces?

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan kan jeg begrænse CPU-brugen til 10\% for eksempel til en bestemt proces i Windows C ++?

Bedste reference


Du kan bruge Sleep(x) - vil bremse din programkørsel, men det vil frigøre CPU-cykler

Hvor x er tiden i millisekunder

Andre referencer 1


Dette er sjældent nødvendigt, og måske trådprioriteter er bedre løsning, men siden du spurgte, hvad du skal gøre er:



  1. Lav en lille del af dit 'faste' arbejde, dvs. beregninger

  2. måle, hvor meget tid trin 1) tog, lad os sige det er s twork millisekunder

  3. Sleep() for (100/percent - 1)*twork millisekunder, hvor percent er din ønskede belastning

  4. Gå tilbage til 1.



For at dette skal fungere godt, skal du være meget forsigtig med at vælge, hvor stor en 'fraktion' af en beregning er, og nogle opgaver er svære at opdele. En enkelt fraktion skal tage et sted mellem 40 og 250 millisekunder eller så, hvis det tager mindre, kan overhead fra sove og måling blive betydelig, hvis det er mere, vil illusionen om at bruge 10\% CPU forsvinde, og det vil virke som din tråden er oscillerende mellem 0 og 100\% CPU (hvilket er hvad der sker alligevel, men hvis du gør det hurtigt nok, så ser det ud til at du kun tager uanset procent). To ekstra ting at bemærke: Først, som nævnt før mig, er det på et tråd -niveau og ikke proces -niveau, for det andet skal dit arbejde være rigtigt CPU-arbejde, disk/enhed/netværk I/O involverer normalt meget venter og gør ikke tage så meget CPU.

Andre referencer 2


Det er jobbet hos OS, du kan ikke kontrollere det.

Andre referencer 3


Du kan ikke begrænse til nøjagtigt 10\%, men du kan reducere dets prioritet og begrænse det til kun at bruge en CPU-kerne.