Hoe de uitvoering van het programma in C . te vertragen

Schrijver: John Pratt
Datum Van Creatie: 9 Februari 2021
Updatedatum: 1 Juli- 2024
Anonim
Branchless Programming: Why "If" is Sloowww... and what we can do about it!
Video: Branchless Programming: Why "If" is Sloowww... and what we can do about it!

Inhoud

Heb je ooit een C-programma willen maken dat een bepaalde tijd wacht? U kunt de manier aanpassen waarop u de tijd "fly by" geeft, bijvoorbeeld: wanneer een pop-uppagina (melding of hint) voor het spel wordt weergegeven. ... OK, hier zijn enkele manieren om een ​​"stilstand"-programma te maken, lees verder ...

Stappen

  1. 1 Laat uw processor een tijdje draaien zonder een waarneembare gebeurtenis te veroorzaken.
  2. 2 Voer tijdens deze vertraging geen andere bewerkingen uit om een ​​eenvoudige tijdvertraging te creëren.

Methode 1 van 2: For-loop-techniek

  1. 1 Gebruik een typische "for"-lus gevolgd door een lege instructie om een ​​vertraging te implementeren.
  2. 2 Schrijf bijvoorbeeld als volgt:
    • voor (i = 1; i100; i ++);
    • De operator na de ";" dwingt de computer om 100 keer te herhalen zonder een merkbare gebeurtenis. Het zorgt alleen voor een vertraging.

Methode 2 van 2: De "slaap ()"-techniek

  1. 1 Gebruik slaap (). De functie heet sleep (int ms), gedeclareerd in TIME.H>, waardoor het programma een bepaalde tijd in milliseconden wacht.
  2. 2 Neem de volgende regel in uw programma op vóór int main ():
    • #include TIME.H>
  3. 3 Plak waar nodig om je programma te vertragen:
    • slaap (1000);
    • Wijzig "1000" in het aantal milliseconden dat u wilt wachten (als u bijvoorbeeld een vertraging van 2 seconden wilt maken, vervangt u deze door "2000".
    • Tip: Op sommige systemen kan de waarde worden opgegeven in seconden in plaats van milliseconden. Daarom is 1000 soms niet 1 seconde, maar eigenlijk 1000 seconden.

Voorbeeldcode

Een programma dat een bepaald aantal seconden wacht:



#include stdio.h> #include dos.h> int main () {int del; // De vertragingsperiode printf ("Voer de vertragingstijd in (in seconden):"); scanf ("% i",? del); del * = 1000; // Vermenigvuldig het met 1000 om te converteren naar milliseconden Delay (del); // Vertraging. printf ("Gereed."); retourneer 0; }


Een programma dat aftelt van 10 naar 0:


#include STDIO.H> #include TIME.H> int main () {int i; for (i = 10; i> = 0; i--) {printf ("% i n", i); // Schrijf het huidige 'countdown'-nummer Vertraging (1000); // Wacht even} retourneer 0; }

Tips

  • Een milliseconde is 1/1000 van een seconde.
  • Het bovenstaande algoritme kan worden geïmplementeerd met behulp van elke lusstructuur gevolgd door de null-operator - "; zoals het gebruik van while- of do-while-lussen.

Waarschuwingen

  • Deze methode is over het algemeen nutteloos voor iets anders dan een triviaal programma. Gebruik in het algemeen timers of een gebeurtenisgestuurde aanpak om dit te bereiken. Anders reageert het programma tijdens de vertragingstijd niet meer en dit is niet altijd een goede zaak. Ook het kiezen van N in een lus, als het afhangt van de uitvoering van opdrachten, kan onverwachte resultaten hebben. Blijkbaar heeft de oorspronkelijke auteur nog nooit gehoord van een optimaliserende compiler ... het kan een hele lus optimaliseren als het eigenlijk niets doet!
  • Merk op dat bij het gebruik van de "for-loop"-methode, het een zeer groot interval voor i kan duren, aangezien een lege instructie erg snel is. Zulke grote getallen passen misschien niet in een geheel getal.
  • Als u een for-lus gebruikt, kan de compiler de code optimaliseren en aangezien de lus niets doet, verwijdert u deze. Dit gebeurt niet bij gebruik van Delay ().