AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Threads gleichzeitig

Ein Thema von Frickel · begonnen am 7. Apr 2004 · letzter Beitrag vom 7. Apr 2004
Antwort Antwort
Seite 2 von 2     12   
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
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#12

Re: Mehrere Threads gleichzeitig

  Alt 7. Apr 2004, 15:26
hm... irgendwie habe ich Dein Konzept noch nicht erkannt... aber trotzdem die Antwort auf Deine Frage
Zitat von Frickel:
Wie stell ich es an, das ich benachrichtigt werden, wenn alle Threads beendet wurden??
Bei Thread-Begin würde ich mittels InterlockedIncrement eine "globale" Worker-Thread-Counter-Variable inkrementieren, bei Thread-Ende mittels InterlockedDecrement wieder dekrementieren. Wenn das Resultat von InterlockedDecrement 0 ist, war dies der letzte Thread... für die Benachrichtigung würde ich ein Event (CreateEvent) verwenden.. denkbar wären auch Messages (PostMessage)...

Zeitlich wäre es allerdings optimaler, immer 10 Threads laufen zu lassen und nicht zu warten, bis die ersten 10 fertig sind, und dann 10 neue starten... sprich: sobald nur noch 9 Threads laufen, muss der Master wieder einen starten....
  Mit Zitat antworten Zitat
Benutzerbild von APP
APP

Registriert seit: 24. Feb 2003
Ort: Graz (A)
705 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: Mehrere Threads gleichzeitig

  Alt 7. Apr 2004, 19:45
Hallo Frickel,
eine andere Lösung um zu erfassen wann alle Threads zerstört sind, habe ich
hier ( http://www.delphipraxis.net/internal...hlight=threads )
ziemlich weit unten gepostet. Vieleicht hilft Dir das als Ansatz.
Armin P. Pressler

BEGIN
...real programmers are using C/C++ - smart developers Delphi;
END;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 13:23 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