You're here: Snippet Directory » Delphi (11)
Language:

TThread verwenden

Language: Deutsch
Programming Language: Delphi
Published by: pumi
Last Update: 5/16/2006
Views: 2887


Description

Hier ein einfaches Beispiel, wie man TThread verwenden kann

Code

1 unit Unit1; 2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 7 StdCtrls; 8 9 type 10 TForm1 = class(TForm) 11 btnExecThreads: TButton; 12 lblThread1: TLabel; 13 lblThread2: TLabel; 14 lblAnzTh1: TLabel; 15 lblAnzTh2: TLabel; 16 procedure btnExecThreadsClick(Sender: TObject); 17 end; 18 19 type 20 { eigene Threadklasse aus TThread abgeleitet } 21 TMyThread = class(TThread) 22 private 23 { Weil VCL-Objekt braucht man eine eigene Rountine, 24 damit man Synchronize aufrufen kann synchronize(ShowLabel) } 25 procedure ShowLabel; 26 protected 27 { Alles was in Execute steht, wird in einem seperaten Thread ausgeführt } 28 procedure Execute; override; 29 public 30 { das Label, in dem das Ergebnis angezeigt wird } 31 aLabel: TLabel; 32 { Variable des TThread-Objektes, dem eine Integer Wert, 33 nach Create übergeben wird } 34 aint: integer; 35 { der berechnete Wert } 36 fx: extended; 37 end; 38 39 var 40 Form1: TForm1; 41 42 implementation 43 44 {$R *.DFM} 45 46 procedure TForm1.btnExecThreadsClick(Sender: TObject); 47 var th, th2: TMyThread; 48 begin 49 { Thread 1 erzeugen } 50 th := TMyThread.create(TRUE); 51 { Variablen zuweisen } 52 th.aint := 10; 53 th.aLabel := lblThread1; 54 { automatische Freigabe nach Beendigung} 55 th.FreeOnTerminate := TRUE; 56 { Thread ausführen } 57 th.Resume; 58 59 { Thread 2 erzeugen } 60 th2 := TMyThread.create(TRUE); 61 { Variablen zuweisen } 62 th2.aint := 10000000; 63 th2.aLabel := lblThread2; 64 { automatische Freigabe nach Beendigung} 65 th2.FreeOnTerminate := TRUE; 66 { Thread ausführen } 67 th2.Resume; 68 end; 69 70 { TMyThread } 71 72 procedure TMyThread.ShowLabel; 73 begin 74 { wert im Label anzeigen } 75 aLabel.Caption := floattostr(fx); 76 end; 77 78 procedure TMyThread.Execute; 79 var i: integer; 80 begin 81 { Dummy Berechnung } 82 for i := aint to 100000000 do fx := i + pi; 83 { VCL-Methoden immer mit Synchronize } 84 synchronize(ShowLabel); 85 end; 86 87 end.

No comments avaiable

Add a comment

Name *  

Email (won't be displayed) *    

Website  

Comment *  

Sicherheitscode Security Code *    

RSS