AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem bei der Ausführung eines Threads
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei der Ausführung eines Threads

Ein Thema von Tommahawk · begonnen am 27. Jul 2009 · letzter Beitrag vom 27. Jul 2009
Antwort Antwort
Seite 1 von 2  1 2      
Tommahawk

Registriert seit: 28. Mai 2003
Ort: Überlingen
18 Beiträge
 
Delphi 2007 Enterprise
 
#1

Problem bei der Ausführung eines Threads

  Alt 27. Jul 2009, 09:54
Guten Morgen liebe Delphi-Freunde!

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?


Viele sonnige Grüße vom Bodensee

Thomas a.k.a. Tommahawk
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Problem bei der Ausführung eines Threads

  Alt 27. Jul 2009, 09:59
Zitat von Tommahawk:
Guten Morgen liebe Delphi-Freunde!
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?
Keine,
aber gehe mal ins Detail - irgendein Problem wirst Du ja damit haben, oder?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Tommahawk

Registriert seit: 28. Mai 2003
Ort: Überlingen
18 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Problem bei der Ausführung eines Threads

  Alt 27. Jul 2009, 10:37
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
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Problem bei der Ausführung eines Threads

  Alt 27. Jul 2009, 10:40
Zitat von Tommahawk:
Alle x Millisekunden soll die Farbe des Panels geändert werden, sodass ein Blinkeffekt entsteht. Diese Aufgabe übernimmt mein Thread.
Schon mal durchgelesen was Delphi so in der Unit schreibst wenn du eine Thread-Klasse über "Menu/Neu.." erstellst
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Tommahawk

Registriert seit: 28. Mai 2003
Ort: Überlingen
18 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Problem bei der Ausführung eines Threads

  Alt 27. Jul 2009, 10:52
Hallo Bernhard!

Ganz klare Antwort: NEIN

Ich habe meine Thread-Klassen bisher immer manuell erstellt.

Meinst Du den folgenden Kommentar?

Delphi-Quellcode:
{ 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; }
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.


Viele Grüße

Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Problem bei der Ausführung eines Threads

  Alt 27. Jul 2009, 10:57
Zitat von Tommahawk:
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.
Wollte ich.


Aber zeig doch mal ein bischen Code was du bisher hast.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Tommahawk

Registriert seit: 28. Mai 2003
Ort: Überlingen
18 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Problem bei der Ausführung eines Threads

  Alt 27. Jul 2009, 11:01
Siehe oben! Heute Abend.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Problem bei der Ausführung eines Threads

  Alt 27. Jul 2009, 11:13
Zitat:
Alle x Millisekunden soll die Farbe des Panels geändert werden, sodass ein Blinkeffekt entsteht. Diese Aufgabe übernimmt mein Thread.
Dir ist klar, dass der Code des Threads, der die Farbe ändert, im Kontext des Hauptthreads ausgeführt wird? Und da das alle paar Millisekunden passiert kannst du auch auf den Thread verzichten.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Problem bei der Ausführung eines Threads

  Alt 27. Jul 2009, 11:33
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
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Tommahawk

Registriert seit: 28. Mai 2003
Ort: Überlingen
18 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Problem bei der Ausführung eines Threads

  Alt 27. Jul 2009, 11:53
*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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz