![]() |
Problem bei der Ausführung eines Threads
Guten Morgen liebe Delphi-Freunde! :freak:
Bevor ich ins Detail gehen werde, möchte ich an Euch erst einmal eine allgemeine Frage zum Thema Threads richten. Ausgangslage: Ich habe eine VCL-Anwendung mit einem Button erstellt. In der OnClick-Ereignisroutine des Buttons wird ein Thread erzeugt, der sofort startet. Frage: Welche Auswirkungen hat es auf die Ausführung des Threads, wenn nach dessen Erzeugung in der OnClick-Ereignisroutine des Buttons weitere, beliebige Anweisungen verarbeitet werden? :gruebel: Viele sonnige Grüße vom Bodensee :hi: Thomas a.k.a. Tommahawk |
Re: Problem bei der Ausführung eines Threads
Zitat:
aber gehe mal ins Detail - irgendein Problem wirst Du ja damit haben, oder? Grüße Klaus |
Re: Problem bei der Ausführung eines Threads
Hallo Klaus,
leider liegt mein Beispiel-Quelltext zu Hause. Ich werde ihn aber heute Abend posten. Im Moment kann ich Dir nur eine ausführliche Beschreibung meines Problems anbieten. Beschreibung: Außer dem Button existiert noch ein kleines Panel auf dem Formular. Alle x Millisekunden soll die Farbe des Panels geändert werden, sodass ein Blinkeffekt entsteht. Diese Aufgabe übernimmt mein Thread. Währenddessen verrichtet der "Mainthread" in der OnClick-Ereignisroutine seine eigentlichen Arbeiten (z.B. Berechnungen, Verarbeitung von Daten, ...). Nachdem der "Mainthread" seine Arbeiten abgeschlossen hat, terminiert mein eigener Thread. Zusammengefasst: Das Panel blinkt relativ gleichmäßig, während meine Anwendung seine eigentliche Arbeit verrichtet ... zum Beispiel, wenn ich auf den Button klicke. Das ist die Theorie. In der Praxis sieht das Ganze so aus, dass mein Thread erzeugt wird, aber wohl erst zur Ausführung kommt, wenn die restlichen Anweisungen in der OnClick-Ereignisroutine des Buttons abgearbeitet worden sind. Das sieht dann nicht mal ansatzweise danach aus, dass meine Anwendung Anweisungen ("pseudo")-parallel ausführt. Meine Vermutung: Es hat irgendetwas mit der Verarbeitung von Windows-Messages zu tun. Viele Grüße Thomas |
Re: Problem bei der Ausführung eines Threads
Zitat:
|
Re: Problem bei der Ausführung eines Threads
Hallo Bernhard!
Ganz klare Antwort: NEIN :nerd: Ich habe meine Thread-Klassen bisher immer manuell erstellt. Meinst Du den folgenden Kommentar?
Delphi-Quellcode:
Also ich bin der Meinung, dass ich das in meiner eigenen Thread-Klasse so umgesetzt habe, sofern Du mich auf die Prozedur "Synchronize" aufmerksam machen wolltest.
{ Wichtig: Methoden und Eigenschaften von Objekten in visuellen Komponenten dürfen
nur in einer Methode namens Synchronize aufgerufen werden, z.B. Synchronize(UpdateCaption); und UpdateCaption könnte folgendermaßen aussehen: procedure TMyThread.UpdateCaption; begin Form1.Caption := 'Aktualisiert in einem Thread'; end; } Viele Grüße Thomas |
Re: Problem bei der Ausführung eines Threads
Zitat:
Aber zeig doch mal ein bischen Code was du bisher hast. |
Re: Problem bei der Ausführung eines Threads
Siehe oben! Heute Abend. :wink:
|
Re: Problem bei der Ausführung eines Threads
Zitat:
|
Re: Problem bei der Ausführung eines Threads
Wäre es sowieso nicht sinniger den neuen Thread die Berechnungen ausführen zu lassen, während sich der Mainthread um die GUI kümmert? Dann kann man sich dieses ganze ge-synchronize-e sparen :?
Gruß, Sven |
Re: Problem bei der Ausführung eines Threads
*hmm*
Dann definiere ich hiermit den Wertebereich des Intervals genauer. Minimum sind 2 Sekunden (2000 Millisekunden). @Luckie: Bleibst Du bei Deiner Aussage? @JamesTKirk: Im Grunde genommen, ist das hier ein vereinfachtes Beispiel. Mir war nicht ganz klar, dass ich so weit ausholen muss. Im ganz Speziellen geht es darum, über eine TCP/IP-Verbindung von einem TCP/IP-Server eine Datei abzuholen, lokal abzuspeichern und zu verarbeiten und dem TCP/IP-Server mitzuteilen, ob die lokale Verarbeitung der Datei erfolgreich ausgeführt worden ist, oder eben nicht. Während der lokalen Verarbeitung der Datei muss die Verbindung zum TCP/IP-Server durch einen regelmäßigen "Ping" aufrechterhalten werden, da sonst der TCP/IP-Server die Verbindung nach 10 Sekunden abbricht. Auf den eigentlichen Quelltext der Anwendung und somit auf den Quelltext der lokalen Verarbeitung der Datei, sowie auf den TCP/IP-Server habe ich keinen Einfluss. Ich stelle lediglich eine Klasse zur Verfügung, in der intern die gesamte TCP/IP-Kommunikation implementiert ist. Nur der "Ping", den ich in einen Thread ausgelagert habe, scheint genauso wenig zu funktionieren, wie das Ändern der Farbe des Panels in meinem vereinfachten Beispiel. Viele Grüße Thomas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz