Einzelnen Beitrag anzeigen

Frickel

Registriert seit: 27. Feb 2004
8 Beiträge
 
#11

Re: Mehrere Thraeds gelichzeitig

  Alt 7. Apr 2004, 15:08
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 <> '0THEN
    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
  Mit Zitat antworten Zitat