sleep time in einer Endlosschleife



  • Hallo,

    Da ich eine Endlosschleife habe, die sich schnellstmöglichst immer wieder wiederholen soll, habe ich ein kleines Timeout eingebaut, damit die CPU nicht Amok läuft.

    Dabei ist mir aufgefallen, dass ein Schlafwert von einer Millisekunde hier schon reicht - und die Schleife soll auch so schnell wie möglich immer wieder wiederholt werden.

    Da frag ich mich, warum die meisten immer 100 - 200 Millisekunden verwenden, wobei die CPU bei einer Einzigen nicht mehr überlastet wird.

    Lieg ich richtig oder falsch? Warum lieg ich falsch?

    Danke.



  • wenn du z.b. eine ausführungszeit von 200ms hast, läuft die cpu trotzdem wieder voll durch. außerdem brauchst du meistens nur einmal pro sekunde (oder einmal alle 5 min, alle 2 h, alle 24 h, ...) einen wert, sodass es ziemlich unsinnig ist, 1 ms zu nehmen.



  • @Wade1234 sagte in sleep time in einer Endlosschleife:

    wenn du z.b. eine ausführungszeit von 200ms hast, läuft die cpu trotzdem wieder voll durch. außerdem brauchst du meistens nur einmal pro sekunde (oder einmal alle 5 min, alle 2 h, alle 24 h, ...) einen wert, sodass es ziemlich unsinnig ist, 1 ms zu nehmen.

    D.h. für Dinge, die jeweils immer in ein paar Millisekunden abgearbeitet sind machen eine Millisekunde Sinn? Andernfalls, wenn der Schleifenrumpf härter arbeitet, somit mehr Zeit vergeudet, macht eine größere Sleep time Sinn?



  • es kommt vor allem darauf an, wie oft die schleife ausgeführt werden muss. wenn du z.b. eine heizungssteuerung programmierst, macht es einfach keinen sinn, alle 5 ms einen temperaturwert auszulesen, weil sich dieser wenn überhaupt sowieso erst nach 5 min erkennbar verändert hat, und wenn du mehrere threads in echtzeitsystemen hast, müssen die niedrig priorisierten threads ja auch zeit zum rechnen bekommen.



  • @eigenartig sagte in sleep time in einer Endlosschleife:

    Da ich eine Endlosschleife habe, die sich schnellstmöglichst immer wieder wiederholen soll

    Warum?



  • @Swordfish sagte in sleep time in einer Endlosschleife:

    @eigenartig sagte in sleep time in einer Endlosschleife:

    Da ich eine Endlosschleife habe, die sich schnellstmöglichst immer wieder wiederholen soll

    Warum?

    Z.B. für Spiele.



  • @Hubert-Alfonsius Ich hab' schon @eigenartig nach seinem speziellen Grund gefragt.



  • Eine Schleife die sleeped kann sich nicht schnellstmöglich wiederholen. Das geht nur wenn der Prozessor ( bzw. einer der Kerne) auf 100% läuft. Von daher ist das ganze recht sinnlos.



  • Ne "richtige" Lösung würde man wohl unter Benutzung von posix-eventfd oder winapi-waitformultipleobjects bauen...
    Dann braucht man nicht mit einer Schleife arbeiten, die irgendwas pollt, in der Hoffnung das Arbeit anfällt. 🙂

    @eigenartig: wer sind denn "die meisten" die solche Intervalle verwenden? Ich sehe solche Schleifen eigentlich recht selten und wenn doch dann sind es in aller Regel Frischlinge. Nur weil im Internet irgendwo Quelltext steht, muss er nicht automatisch sinnvoll sein. In Ausnahmefällen kann man solche Schleifen mal nutzen, wenn andere Lösungen nicht infrage kommen.



  • Erkläre doch am besten mal was du vorhast. Oft werden solche Schleifen in der falschen Situation verwendet und es gibt bessere Alternativen.


Log in to reply