Werte zur Laufzeit abfragen



  • hallo

    jetzt hab ich schon 20 min im Forum gesucht aber noch nichts passendes gefunden.

    ich habe einen START PAUSE STOP Button.

    Ist der Start Button aktiv macht der verschiedene Sachen ( auch progressBar ect. )

    jetzt hab ich ein flag gesetzt das er das so lange macht wie man Pause drueckt.

    Wenn Pause gedrueckt ist soll er halt pausieren und dann weitermachen.

    if( m_pact_case < m_Test_cases.size() && m_break_flag != TRUE)
    
    //  m_break_flag  ist das Flag
    

    das wird auf true gesetzt beim druecken des Pause buttons.

    das problem ist. es geht nicht 😞

    MFC fuehrt das auf TRUE setzen erst am schluss der berechnung durch 😞

    wie mach ich das jetzt? ich muss doch keinen Timer oder so miteinbringen, oder?

    Dank im voraus



  • Ich vermute mal, du machst deine Berechnungen in einer Schleife...

    So lange, wie diese Schleife läuft, merkt das Programm gar nicht, dass der Knopf gedrückt wurde.

    Leider hab ich gerade keine Idee, wie das anders geht. 😞



  • Bei längeren Abläufen werden die Messages nicht mehr abgefragt, daß muß man dann von Hand machen. Dazu sollte folgender Code reichen:

    if (::PeekMessage(&message,NULL,0,0,PM_REMOVE))
    {
    	::TranslateMessage(&message);
    	::DispatchMessage(&message);
    }
    


  • danke fuer die schnellen posts.

    ich habs gleich ausprobiert nur kommt nen error das er
    den pointer &message nicht kennt.

    muss ich ihm mitteilen was sich veraendern kann ( z.b. meine BOOL variable ) oder check er alles selber?



  • Ups sorry...

    mußte noch wech und hatte nur schnell geschrieben ^^

    MSG message;
    

    Sollte natürlich auch deklariert ^^

    😮

    Zum Ändern:
    Die Änderung Deines Bools (nehme mal an m_bPauseAktiv oder sowas) behandelst Du ja in Deiner OnButtonPause() Methode nehme ich an. Der von mir gepostete Code sorgt halt nur dafür, daß der MessageQueue in Deiner Schleife, die den Progress verändert, auch mal abgefragt und behandelt wird. Dadurch springt Deine Anwendung dann auch in die Methode OnButtonPause() zB und deine Membervariablen sollten dann umgesetzt werden, damit die Abbruchbedingung für Deine Schleife gesetzt ist. Da nehme ich mal an machst du ja sowas wie:

    while(!m_PauseAktiv)
    {
        ...
    }
    


  • danke danke

    habs gemacht aber hat noch net so funktioniert, leider.

    ja in meiner Start_Button code habe ich eine schleife

    erst eine if abfrage

    if( m_pact_case < m_Test_cases.size() && m_break_flag != TRUE)
    

    dann ein do while

    do
    {
    
    // duididum mach was
    
    }while( m_command_end == 0 && m_max_commands > 0 && m_TraceStatus!=cApiTransError && m_TraceStatus!=cTraceSwBufferTooSmall);
    

    das flag m_break_flag ist auf FALSE wird mit dem Button Pause auf TRUE gesetzt.

    Jetzt muesste ja die bedingung falsch sein und halt nicht mehr reinspringen.

    aber trotz deinem codes geht es nicht. Hab testhalber mal ne MessageBox ausgegeben mit dem Pause Button. Die Box kommt erst NACH der schleife. also wird diese nicht abgebrochen.

    hmmm was kann ich jetzt machen?



  • lol 🤡 sorry habs bemerkt

    natuerlich kommt die abfrage im while teil nicht im if

    hat prima geklappt merci nochmals



  • Du mußt bei der while-Bedinung auch das m_break_flag abfragen.

    Er soll ja nur solange durchlaufen, wie dieses FALSE ist

    do
    {
        //Mach was
    } while( !m_break_flag && ...);
    


  • fletscher schrieb:

    lol 🤡 sorry habs bemerkt

    natuerlich kommt die abfrage im while teil nicht im if

    hat prima geklappt merci nochmals

    hehhe

    gut gut

    kein problem ^^



  • Oder du verwendest Threads. Dafür sind sie eigentlich da.


Anmelden zum Antworten