title image


Smiley Schönes Thema Thread wiedermal
Hallo Uwe!



Schönes Vorhaben für´s Wochenende. :-)

Der Thread soll die Datei laden also die Arbeit machen, anschließend die Daten an Dein Prog übergeben und hat dann Feierabend? Hab ich das richtig verstanden? Erzähl doch mal, was Du genau vor hast. Extra Daten für den markierten Knoten im TV laden?



Beachte, die Execute-Methode ist die einzige Funktion, die im Kontext des Threads läuft. Ansonsten gehört das ganze Thread Objekt mit seinen Properties zum Hauptthread Deiner Anwendung. Ist lediglich ein handlicher Wrapper.



Anstatt Synchronize kannst Du auch eine WM_USER+X Nachricht via SendMessage an Dein Fenster abfeuern. Die VCL macht intern nichts anderes mit einem Dummy Fenster. Vergleiche Timer.



Die Methode Terminate setzt nur das Flag FTerminate. Brauchst Du nur, falls im Thread eine Endlosschleife While Not(Terminated) eiert. Dann bitte ab und an den Thread mit Sleep schlafen legen. Sonst hast Du 100% CPU Auslastung.





procedure TDLThread.Execute;

begin

LoadTND(FFile); // Zeitaufwändige Funktion läuft im Kontext des Threads.

// Keine Variablen bzw. Objekte des Hauptthreads verwenden!

Synchronize( Update );

end;



procedure TDLThread.Update;

begin

FTV.Selected.Text:=FTV.Selected.Text+' Urlaub';

// Hier Daten an Treeview übergeben

End;



constructor TDLThread.Create( TreeV : TTreeView; Filename:string );

begin

inherited Create(TRUE); // erst mal abwarten ...

FTV:= TreeV; // und private vars des Thread Objektes bestücken

FFile:=Filename; // ...

FreeOnTerminate:=true; // Threadobjekt gibt sich selber nach getaner Arbeit frei

Resume; // Jetzt geht´s aber los

end;





Das soll´s auf die Schnelle gewesen sein. Ansonsten Delphi Hilfe und Beispiel studieren.



Schönes Wochenende und viel Erfolg



OLLI



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: