Hallo Basilikum,
ja das scheinen die Fehler gewesen zu sein.
Habs jetzt mal geändert. So läuft es.
Wie stell ich es an, das ich benachrichtigt werden, wenn alle Threads beendet wurden??
Delphi-Quellcode:
TRY
FOR i := 1
TO 10
DO
T_ARR[i - 1] := T_TestThread.Create(i - 1, g_Datenbank.OutConnection);
FINALLY
//Hier kommt wohl noch was hin
END;
UNIT AddressVerifaction;
INTERFACE
USES
Classes, g_Database, Oracle;
TYPE
T_TestThread =
CLASS(TThread)
private
Buchstabe: Integer;
fWorking:Boolean;
PROCEDURE UpdateMemo(Sender: TObject);
{ Private-Deklarationen }
protected
PROCEDURE Execute;
override;
public
CONSTRUCTOR Create(aBuchstabe: Integer; Connection: TOracleSession);
PROPERTY Count: Integer
read fCount
write fCount;
Property Working:Boolean
Read fWorking
Write fWorking;
END;
IMPLEMENTATION
USES SysUtils, main;
CONSTRUCTOR T_TestThread.Create(aBuchstabe: Integer; Connection: TOracleSession);
BEGIN
INHERITED Create(True);
Buchstabe := aBuchstabe;
FreeOnTerminate := True;
OnTerminate := UpdateMemo;
Working:=True;
Resume;
END;
PROCEDURE T_TestThread.Execute;
VAR
i: Integer;
iSuccess: Boolean;
RequestData: REQ_Satz;
BEGIN
WHILE iSuccess
DO
BEGIN
RequestData.A1 := '
0';
RequestData.A2 := '
';
RequestData.A3 := '
';
RequestData.A4 := '
';
RequestData.A5 := '
';
RequestData.A6 := '
';
RequestData.A7 := '
';
RequestData.A8 := '
';
iSuccess := g_Datenbank.GetRecord(RequestData);
IF RequestData.A1 <> '
0'
THEN
BEGIN
//Verarbeite Daten
Sleep(100);
END;
END;
{ Thread-Code hier einfügen }
END;
PROCEDURE T_TestThread.UpdateMemo(Sender: TObject);
BEGIN
//Hier würde ich erwarten, das sich die Threads schön terminieren
Working:=false;
END;
END.
Gruss Frickel