Sleep reagiert seltsam in Schleife



  • Ich kannte das mit dem flush nicht, hab es jetzt gesucht und gefunden.
    Funktioniert auch. Man kann mich noch zu leicht ablenken als Anfänger.
    Danke.

    cout << ....... << flush;
    oder
    cout.flush();



  • TGGC, was ist loss, bist du krank? Ich meine ... ein hilfreicher Beitrag von dir, das kann ja wohl nicht sein.



  • Was ist das Problem? f'`8k

    Autocogito

    Gruß, TGGC (Was Gamestar sagt...)



  • Ich glaube, das Problem ist weniger das fehlende std::flush und viel eher die 1 als Parameter für Sleep - Sleep erwartet ms als Parameter. Und mit ner 1 wird es glaube ne Pause von ca. 17ms oder so machen, irgendwo in der MSDN steht die Auflösung von Sleep drin...

    Mach einfach mal drei Nullen ran (hinten an die eins ;D) und versuch es noch mal ^^

    bb



  • Hi,

    ist nicht sogar für std::cerr garantiert, dass es nicht puffert (mit allen Vor- und Nachteilen) ?
    Bei uns können wir jedenfalls damit prüfen, ob unser Problem etwas mit dem Puffern zu tun hat.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Hi,

    ist nicht sogar für std::cerr garantiert, dass es nicht puffert (mit allen Vor- und Nachteilen) ?
    Bei uns können wir jedenfalls damit prüfen, ob unser Problem etwas mit dem Puffern zu tun hat.

    Gruß,

    Simon2.

    Japp, imho ist das garantiert


  • Mod

    unskilled schrieb:

    Ich glaube, das Problem ist weniger das fehlende std::flush und viel eher die 1 als Parameter für Sleep - Sleep erwartet ms als Parameter. Und mit ner 1 wird es glaube ne Pause von ca. 17ms oder so machen, irgendwo in der MSDN steht die Auflösung von Sleep drin...

    Mach einfach mal drei Nullen ran (hinten an die eins ;D) und versuch es noch mal ^^

    bb

    Offensichtlich nicht:

    SleepWhile schrieb:

    ...Ausgabe wird nach 5 Sekunden angezeigt...



  • SeppJ schrieb:

    unskilled schrieb:

    Ich glaube, das Problem ist weniger das fehlende std::flush und viel eher die 1 als Parameter für Sleep - Sleep erwartet ms als Parameter. Und mit ner 1 wird es glaube ne Pause von ca. 17ms oder so machen, irgendwo in der MSDN steht die Auflösung von Sleep drin...

    Mach einfach mal drei Nullen ran (hinten an die eins ;D) und versuch es noch mal ^^

    bb

    Offensichtlich nicht:

    SleepWhile schrieb:

    ...Ausgabe wird nach 5 Sekunden angezeigt...

    oh - sry.
    Da stand ja was vonwegen Linux, da stimmt das mit den ms natürlich auch nicht, weil dort Sekunden angegeben werden müssen so weit ich weiß^^

    bb



  • Naja.
    Sleep nimmt Millisekunden, sleep dagegen nimmt Sekunden.
    So oder so ähnlich.



  • hustbaer schrieb:

    Naja.
    Sleep nimmt Millisekunden, sleep dagegen nimmt Sekunden.
    So oder so ähnlich.

    Genau so, in der Unix-welt gibt es dann glaube ich noch usleep^^

    so in etwa:

    void Sleep(unsigned long milliseconds)
    {
    #	if defined(_WIN32) || defined(_WIN64)
    		::Sleep(milliseconds);
    #	else
    		::sleep(milliseconds / 1000);
    		::usleep(milliseconds % 1000);
    #	endif
    }
    

    bb



  • ::usleep(milliseconds % 1000); -> ::usleep((milliseconds % 1000) * 1000);
    oder so 🙂



  • hustbaer schrieb:

    ::usleep(milliseconds % 1000); -> ::usleep((milliseconds % 1000) * 1000);
    oder so 🙂

    das hört sich für mich gerad falsch an
    ich hab das so verstanden:
    sleep nimmt die sekunden(also (unsigned long)millisekunden/1000 ) und dann usleep die millisekunden( (unsigned long)millisekunden%1000 ).
    da millisekunden schon ein unsigned long ist, können wir uns den cast hier schenken:
    ::sleep(millisekunden/1000); - sekunden sind weg, bleiben noch die millisekunden:
    ::usleep(millisekunden%1000); - millisekunden werden hier "abgearbeitet"

    oder hab ich das falsch verstanden?
    iwo hatte ich auch ma nen grund gelesen, warum man nicht einfach nur usleep aufrufen sollte, aber die url hab ich leider nich mehr gefunden - bzw. nur keinen nerv, die zu suchen ^^

    bb


Anmelden zum Antworten