Schleife "verlangsamen"?



  • Erstmal hallo zusammen :).

    Ich habe eine Frage zur Ausführung von Schleifen. Wenn ich mit einer Schleife eine permanente Abfrage machen muss, dann ist leider die CPU-Auslastung bei 100%.

    Daher wüsste ich gerne, ob Möglichkeiten bestehen, die Schleife zu verlangsamen, z.B. indem ich sage "führe die Schleife höchstens 30 Mal pro Sekunde aus".

    Würde mich riesig über eine Antwort freuen!

    Danke und Gruß

    Thomas



  • Ich glaube es gibt verschieden Ansätze.

    Wenn du eine Funktion hast, die in einer Endlosschleife (scheint hier der Fall zu sein) etwas abfragt (pullt), stellt sich die Frage ob nicht ein eigener Thread hilfreich wäre.
    Ansonsten kannst du mit Timern arbeiten (Weiss allerdings nicht ob das per Se verfügbar ist. Kenne es aus dem QT Framework von Trolltech (QTimer)).
    Schlechte Varianten wären Sleep Aufrufe, da plattformabhängig. (aber machbar)



  • Hi cof,

    danke für deine Antwort.

    Du hast Recht. Es handelt sich um eine Endlosschleife, die Koordinaten abgleicht. Wie könnte ich das Problem in dem Kontext lösen?

    Grüße

    Thomas



  • cppthomas schrieb:

    Du hast Recht. Es handelt sich um eine Endlosschleife, die Koordinaten abgleicht. Wie könnte ich das Problem in dem Kontext lösen?

    Die einfachste Möglichkeit wär ein Sleep(1); in die Schleife zu tun und windows.h noch zu inkludieren. Geht auch leider nur auf Windows.

    mfg.



  • Hi joomoo,

    sehr genial, genau das habe ich gesucht! Habe gerade auch gelesen es gibt wenigstens für Linux noch das äquivalent "nanosleep()". das programm wird aber vorraussichtlich sowieso nur auf pc laufen.

    viele grüße

    Thomas



  • Vielleicht reicht dir Sleep ja als Lösung aber du könntest doch einfach einen Counter nehmen, der bei allen Durchläufen erhöht wird und bei entsprechender Endzahl einfach wieder auf 0 gesetzt wird und anschließend wird die Abgleichung der Koordinaten durchgeführt.
    Somit kannst du nebenbei noch andere Dinge durchführen lassen (falls notwendig)



  • hi,

    danke für den tipp, aber Sleep(); reicht aus.

    und sleep brauch ich jetzt persönlich auch. gute nacht.

    thomas


Anmelden zum Antworten