switsch Problemchen



  • Hab damit ein Prob:
    und zwar soll er den Integer Zeit alle halbe Sec um 1 verringern, bis er 0 ist, dann soll die MessageBox kommen und die Schleife beendet werden, aber irgendwie wird der Wert nicht runtergezählt
    Was ist falsch? (Info: VStudio, C++)

    switch(Zeit)
    {
    case 0:
    MessageBox("uiuiui", NULL, MB_ICONEXCLAMATION |MB_OK);
    break;
    default:
    Zeit--;
    Sleep(500);
    }



  • Du suchst ne Schleife, nehm ich an.
    Schleifen mit do, while oder for.
    while(zeit)
    {
    Sleep(500);
    --Zeit;
    }
    //aha, die Schleife ist um
    MessageBox(...



  • du kanst dir auch einen Timer bastelt und den auf 500 ms einstellen.



  • Manchmal kommen Klammern gut, sonst rasselt er immer ins BREAK 😃

    switch(Zeit)
    {
    case 0:
    {
    MessageBox("uiuiui", NULL, MB_ICONEXCLAMATION |MB_OK);
    break;
    }
    default:
    {
    Zeit--;
    Sleep(500);
    }
    }
    

    [ Dieser Beitrag wurde am 13.09.2002 um 10:10 Uhr von Unterbezahlter editiert. ]

    [ Dieser Beitrag wurde am 13.09.2002 um 10:11 Uhr von Unterbezahlter editiert. ]



  • Original erstellt von Unterbezahlter:
    **Manchmal kommen Klammern gut, sonst rasselt er immer ins BREAK 😃

    switch(Zeit)
    {
    case 0:
    {
    MessageBox("uiuiui", NULL, MB_ICONEXCLAMATION |MB_OK);
    break;
    }
    default:
    {
    Zeit--;
    Sleep(500);
    }
    }
    

    [ Dieser Beitrag wurde am 13.09.2002 um 10:10 Uhr von [qb]Unterbezahlter** editiert. ]

    [ Dieser Beitrag wurde am 13.09.2002 um 10:11 Uhr von Unterbezahlter editiert. ][/QB]

    😕

    Die Klammern sind nicht notwendig. Lediglich für die Zukunft fehlt bei default: ein break wenn man unter dieser noch ein weiteres case einbaut. Unterbezahlt ?

    [ Dieser Beitrag wurde am 13.09.2002 um 10:51 Uhr von Unix-Tom editiert. ]

    [ Dieser Beitrag wurde am 13.09.2002 um 10:52 Uhr von Unix-Tom editiert. ]



  • Also thx
    habs jetzt folgendermaßen gelöst:

    void CTest002Dlg::OnButton4()
    {

    int Zeit;

    UpdateData(TRUE);

    Zeit = m_intZeit;

    while(Zeit > 0)
    {
    Zeit--;
    m_strInfo = Zeit;
    m_strInfo.Format("Info: %i", Zeit);
    Sleep(1000);
    }

    MessageBox("uiuiui", NULL, MB_ICONEXCLAMATION | MB_OK);

    UpdateData(FALSE);

    }

    allerdings gibts noch ein Problem mit:

    {
    Zeit--;
    m_strInfo = Zeit;
    m_strInfo.Format("Info: %i", Zeit); //<-------
    Sleep(1000);
    }

    In meinem statischen Textfeld wird der Wert nicht runtergezählt, sondern wird erst am Ende der Schleife übernommen. 😕



  • Ja, da fehlt da noch ein UpdateData(FALSE); und diese Funktion, die sollte bei jedem Scleifendurchlauf aufgerufen werden, sonst hängt dein Programm fest...

    ////////////////////////////////////////////////////////////////////////////////
    //********** Prozess Events and Messages, if any *******************************
    void CUsefullTools::DoEvents()  // Evtl. Anstehende Events ausführen
    { 
        MSG msg;                    // Message Variable
    
        // Process existing messages in the application's message queue. 
        // When the queue is empty, do clean up and return. 
        while (PeekMessage(&msg,NULL,0,0,PM_NOREMOVE)) {    // Solange Messages vorhanden
    
            if (!AfxGetThread()->PumpMessage()) return;      // Kein plan...  :-)
        } 
    }
    

    Ich weis echt nicht wie oft ich diese Funktion hier schon gepostet habe... 😞



  • Du hast UpdateData() vergessen!



  • danke

    void CTest002Dlg::OnButton4()
    {

    int Zeit;

    UpdateData(TRUE);

    Zeit = m_intZeit;

    while(Zeit > 0)
    {
    Zeit--;
    m_strInfo = Zeit;
    m_strInfo.Format("Info: %i", Zeit);
    UpdateData(FALSE);
    Sleep(1000);
    }

    MessageBox("uiuiui", NULL, MB_ICONEXCLAMATION | MB_OK);

    UpdateData(FALSE);

    }

    gelöst 😃



  • So noch ein letztes Prob *nerv*:

    Ich möchte während der Zahlprozedur jederzeit abbrechen können. Ich hab es schon mit einem Button versucht, allerdings kann ich diesen nicht betätigen während der Schleife. Was gibt es da für Möglichkeiten? 😮



  • Siehe meinen Post, speziell die Funktion...



  • hi,

    nimm doch nen timer. den kannst du dann jederzeit mit dem button unterbrechen

    cu
    Dommel



  • Jau, genau das solltest du machen (Stichworte: SetTimer(), KillTimer()). Und außerdem solltest du den Leuten zuhören, die dir helfen wollen (siehe PanicMans 2 Beiträge). Sonst hilft dir nämlich irgendwann keiner mehr.


Log in to reply