GUI friert ein trotz des extra Threads



  • Hallo,

    ich programmiere mit BCB 5.0 Pro.

    Mein Programm lädt Dateien auf einen FTP-Server hoch. Das Hochladen geschieht in einem extra Thread.

    Das Problem ist, dass während des Hochladen das GUI nicht mehr auf Benutzereingaben reagiert.
    Ich habe im Thread eine Funktion "Hochladen()", welche ich mit "Synchronize()" aufrufe.
    In der Funktion "Hochladen()" werden Funktionen aufgerufen, die in TForm definiert sind.

    Kann es dadurch zum Einfrieren der GUI kommen, dass die Funktionen, die im Thread aufgerufen werden, in TForm definiert sind?

    Danke



  • Ja!

    mfg
    xXx

    PS: Synchronize sorgt dafür, das die Funktion im VCL-Thread ausgeführt wird und nicht in deinem Thread, der wartet solange.



  • Hallo

    Wenn du das gesamte Herunterladen im Synchronize abhandelst, hast du in der Tat nichts gewonnen. Du must aufteilen : Das Herunterladen findet direkt in der Execute-Funktion des Threads statt, ohne Synchronize. Ab und zu (am besten nicht öfters als einmal pro Sekunde) wird während des Herunterladens Synchronize ausgerufen, was dann nichts weiter macht außer den aktuellen Fortschritt in die GUI einzutragen.

    bis bald
    akari



  • Aber:
    Klappt das denn auch wenn er z.B. die Indy-Komponenten nutzt (sind die beim BCB5 dabei?)?
    Weil Indy 9 hat ja z.B. die AntiFreez-Komponenten und ich glaube nicht, dass das Grundlos ist 😉 Threads können üble Seiteneffekte habe, wenn man nicht weiß was man tut..

    mfg
    xXx



  • Hallo

    Grundsätzlich geht das auch mit den Indy-Komponenten, wenn man es richtig macht. Inwieweit AntiFreeze das Problem lösen würde, kann ich grad nicht abschätzen. Dann könnte man natürlich generell auf den Thread verzichten. Die Verwendung von Threads scheint mir aber sauberer, falls AntiFreeze z.B. intern auch nur ständig ProcessMessages() aufruft...

    bis bald
    akari



  • Danke für die Antworten. Es hat mir sehr weitergeholfen


Anmelden zum Antworten