Zähler soll langsam zählen nur wie???



  • Hi,

    ich habe folgendes Problem, ich habe einen Zähler den ich gerne langsamer
    zählen lassen will. Bis jetzt habe ich nur das hier:

    while(m_XAchse)  
    {
    	m_XAchse++;
    }
    MessageBox("1000 erreicht");
    

    Problem ist die 1000 wird ja sofort erreicht wenn man das Startet. Das liegt wohl an der schnellen CPU oder irre ich mich da? Auf jedenfall will ich das der Zähler langsamer hoch zählt.

    Gruß Ronn

    PS: bin nicht der Crack in C++ deshalb bitte einfache Hilfen danke 🙄



  • Also an deiner schnellen CPU liegt das bestimmt nicht.
    Auch auf einer ewig alten Kiste geht das RatzFatz.

    Es könnte nämlich auch sein, dass der Compiler das wegoptimiert.
    (Wenn ich Stuss erzähle dann korrigiert mich bitte!)
    Wenn da sonst wirklich nichts in der Schleife außer

    m_XAchse++;
    

    steht - dann könnte es sein dass der Comiler m_xAchse einfach auf den Wert setzt.

    Aber so wei dein Code ist

    while(m_XAchse)  
    {
        m_XAchse++;
    }
    MessageBox("1000 erreicht");
    

    wundere ich mich doch sehr dass du irgendeine Ausgabe bekommst.
    while(m_XAchse)
    ist nämlich true für m_XAchse != 0.

    Bestimmt willst du doch sowas hier haben, oder?

    while(m_XAchse < 1000) {
      ++m_XAchse;
      _sleep(1000); // jetzt schläft er eine Minute.
    }
    MessageBox("1000 erreicht", "juhu", MB_ICONINFORMATION);
    

    Kann sein, dass es __sleep heißt.



  • 1. Mit Sleep()

    while(m_XAchse)  
    {
        Sleep(100);// Millisekunden
        m_XAchse++;
    }
    MessageBox("1000 erreicht");
    

    Der Nachteil ist, dass bei Sleep das ganze Programm pausiert.

    2. Mit clock()

    while(m_XAchse)  
    {
        if( ( clock() % 1000 ) > 100 )
            m_XAchse++;
    }
    MessageBox("1000 erreicht");
    

    Deine while-Schleife ist auch falsch.

    Ich denk du meinst das:

    while(m_XAchse < 1000)  
    {
        m_XAchse++;
    }
    MessageBox("1000 erreicht");
    

    EDIT: Zu langsam...



  • Baue nach
    m_XAchse++;

    eine Zeile ein, die eine bestimmte Pause wartet. Wenn du mit der Bibliothek SDL (www.libsdl.org) arbeiten würdest, könnte ich dir da helfen (da gibt es Timer-Funktionen). In reinem C/C++ ist mir keine bekannt (bzw. die, die ich kenne, arbeiten meines Wissens nur max. mit 1s Genauigkeit - zu wenig nehme ich an).

    In der WinAPI sollte es auch 100% eine solche Funktion geben, aber dort kenne ich mich 0 aus.



  • Ja sorry es müsste bei while so heißen.

    while(m_XAchse >= 1000)
    

    Eigentlich ist es eine MFC Anwendung, dachte hier passt die besser rein.

    Mit sleep hatte ich schon verucht nur mit 500, dass sind doch
    500 Millisekunden oder? Das ist aber keine Veränderung gewesen.

    Ich werden mal das zweite Beispiel von Gap versuchen

    Gruß und Danke



  • Also mit Clock geht es danke.

    Aber noch mal na andere frage. Kann man folgendes machen???

    while((m_XAchse < 1000)||(m_Stop != 1))
    

    Also zwei Bedienungen in einer Schleife??

    Gruß Ronn



  • Einfach probieren haett es auch getan, aber es funktioniert!



  • Mmmhh geht nicht, da hängt sich das Programm immer auf, was solls.

    Gruß



  • Zeig mal die komplette Schleife (mit "Umfeld"), womöglich ist da noch ein Fehler drin.



  • Hallo

    Wolfgke schrieb:

    Baue nach
    m_XAchse++;

    eine Zeile ein, die eine bestimmte Pause wartet. Wenn du mit der Bibliothek SDL (www.libsdl.org) arbeiten würdest, könnte ich dir da helfen (da gibt es Timer-Funktionen). In reinem C/C++ ist mir keine bekannt (bzw. die, die ich kenne, arbeiten meines Wissens nur max. mit 1s Genauigkeit - zu wenig nehme ich an).

    In der WinAPI sollte es auch 100% eine solche Funktion geben, aber dort kenne ich mich 0 aus.

    Wie würdest du es denn mir SDL machen? Mit GetTicks(), oder gibt es noch andere nützliche Funktionen?

    Danke chrische



  • Immer wieder nützlich, dieses MSDN:

    Google: site:msdn.microsoft.com WM_Timer 😋



  • Ne das mit dem Aufhängen hat wohl was mit der Hardware zu tun die ich anspreche. Da gibt es Problem mit einem Speicherbereich.

    Das mit der Pause klappt wunderbar, das andere muß ich noch mal selber testen woran das liegt. Den Code hier einstellen na ja der wäre wohl etwas lang bzw. da sind Funktionen dabei die nur mit einer Bestimmten Hardware I/O Karten arbeiten. Von daher muß ich selber noch mal suchen.

    Gruß Ronn


Anmelden zum Antworten