ProgressBar durch Timer Dekrementieren



  • hi. ich habe zwei timer. einen timer auf 5 minuten, der jedesmal einen ftp connect macht. der andere timer ist auf eine sekunde, diesen habe ich um die progressbar zu dekrementieren, um zu sehen wie lange es geht bis der ftp timer den nächsten ftp connect macht. ist die dekrementation fertig, also 0, fängt es wieder von vorne bzw. hinten 🙂 an.
    das ganze sieht wie folgt aus:

    Timer für ProgressBar (1 sekunden interval)

    void __fastcall TForm1::Timer2Timer(TObject *Sender)
    {
        ProgressBar->Position--;
        if(ProgressBar->Position == 0)
        {
            ProgressBar->Position = ProgressBar->Max;
        }
    }
    

    Timer für FTP connecting (5 minuten interval)
    void __fastcall TForm1::TimerTimer(TObject *Sender)
    {
    //......
    }

    es kann sein das der ftp timer auch zweimal connecten tut (je nach if/else), somit hängt das program da dann noch ein wenig mehr als wenn er einmal connecten tut. das problem ist jetzt wohl, da der ftp timer ja beim connecten kurz hängt bis es vollbracht ist, der progressbar timer ja einfach weiter läuft und die progressbar dekrementiert. somit stimmt die anzeige beim nächsten durchlauf nicht mehr. das merkt man dann, weil die progressbar an einer anderen stelle als vorher, kurz anhält (wegen ftp connecting..)

    so, wie löse ich das nun fein?



  • hinzufügend: progressbar max und position ist: 300 (wegen den 5 minuten)



  • Da gibts mehrere Möglichkeiten. Die Beste wäre, einfach eine BOOL Variable zu definieren, nennen wir sie blSTOP. Wenn Du connectest, setzt Du die auf TRUE. Wenn Du fertig bist, auf FALSE.
    In der Methode Timer2Timer frägst Du erst ab, ob blSTOP = FALSE ist. Falls ja, kannste runterzählen, ansonsten machste nichts.



  • sowas ähnliches habe ich schon versucht. beides geht nicht.. der wurm sitzt wohl irgendwo anders.. hmmmm manno



  • Wozu 2 Timer ??? Ist das nicht Ressourcenverschwendung? 😕

    Mach doch einen Timer mit 1000ms Intervall.

    Mit 'ner static Variablen kannste in OnTimer hochzaehlen bis 300 und machst dann die Connection. Wenn fertig, Variable = 0 und weiter geht's 😉

    In der einen Routine kannste die Vorgaenge auch gut synchronisieren.



  • phat merci DerAltenburger 😃


Anmelden zum Antworten