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 1 von 2  1 2      
Frickel

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

Mehrere Threads gleichzeitig

  Alt 7. Apr 2004, 10:35
Hallo,

ich suche im Augenblick einen Lösungsansatz für folgendes Problem:
Ich benötige zur Abarbeitung von vielen Datensätzen eine variable, aber vorher festgelegte Anzahl von Threads (bspw. 10).
Jeder Thread soll sich einen Datensatz aus einer Tabelle holen, diesen zur Verarbeitung durch andere Threads sperren mit den Daten was anstellen und sich dann den nächsten freien Datensatz holen.

Ohne Threads keine Problem. Aber wie erzeuge ich jetzt diese Threads und wie verwalte ich die?

Hat jemand vielleicht einen Ansatz oder ein etwas umfangreicheres Tutorial zum Thema?

Die Tutorials von LuckieOnline kenn ich schon.

Bin für jede Hilfe dankbar. Hab bislang noch nix mit Threads zu tun gehabt.
Gruss Frickel

[edit=sakura] Titel korrigiert. Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Mehrere Thraeds gelichzeitig

  Alt 7. Apr 2004, 10:42
Hi

http://www.delphipraxis.net/internal...hlight=threads

Hmm, Luckie hat wohl an seiner Homepage rumgebastelt, die Links gehen nicht mehr.


Nachtrag: Hier der Link zum Tutorial: http://www.luckie-online.de/Tutorials/
  Mit Zitat antworten Zitat
Frickel

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

Re: Mehrere Thraeds gelichzeitig

  Alt 7. Apr 2004, 10:51
Hallo Matze,

wie bereits geschrieben, die Tutorials kenn ich schon. Helfen mir aber leider nicht so richtig weiter.

Weiss jemand was anderes??

Gruss Frickel
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Mehrere Thraeds gelichzeitig

  Alt 7. Apr 2004, 10:55
Sorry, hab ich total überlesen.

Vielleicht das hier: http://www.delphi-source.de/tutorials/threads/?page=1
  Mit Zitat antworten Zitat
Frickel

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

Re: Mehrere Thraeds gelichzeitig

  Alt 7. Apr 2004, 11:02
Hallo Matze,

kann ja mal vorkommen)

Leider kenn ich das Tut auch schon.

Mein Probelm mit dem Verwalten der einzelnen Threads wird da leider nicht behandelt.

Mit gehts darum die Threads gleichzeitig und in beliebiger Anzahl zu erzeugen, und dann alle gleichzeitig laufen zu lassen.

Wie kann man sowas anfanggen bzw. wie lassen sich die Threads verwalten?

Gruss Frickel
  Mit Zitat antworten Zitat
Shylock

Registriert seit: 29. Mär 2004
7 Beiträge
 
Delphi 7 Professional
 
#6

Re: Mehrere Thraeds gelichzeitig

  Alt 7. Apr 2004, 11:11
Hallo.

Bist du dir sicher, dass du durch die Verwendung der Threads in Verbindung mit Datenbankopertionen überhaupt einen Zeit- bzw. einen Geschwindigkeitsvorteil erreichen kannst? Ich halte es nicht für besonders sinnvoll 10 Threads das gleiche machen zu lassen. Man erzeugt ne Menge overhead aber der Rechner hat trotzdem nicht mehr Bandbreite, CPU Power etc.
Threads sind doch eher eine Möglichkeit verschiedene Dinge so zu erledigen, dass es so aussieht, als ob sie gleichzeitig geschehen würden. Schneller wird dadurch doch nichts.

Und wie hast du vor die Datensätze zu sperren? Mit Hilfe der Datenbank oder hast du deinen eigenen Algo?

Aber das ist nur so 'ne Ansicht von mir.

Viel Erfolg noch.
  Mit Zitat antworten Zitat
Frickel

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

Re: Mehrere Thraeds gelichzeitig

  Alt 7. Apr 2004, 11:31
Hallo Shylock,

hab mich dann wohl etwas missverständlich ausgedrückt.

Der Thread zieht Datensätze aus einer Datenbank. Diese Datensätze werden per INet an eine Auskunftei geschickt. Die Beantwortung der Anfrage kann etwas dauern (ca. 5-30 Sek.). Die Anzahl der zuverarbeitenden Datensätze übersteigt bei sequentieller Bearbeitung aber die vorgegebene Bearbeitungsdauer aller Datensätze.
Deshalb mein Gedanke, wenn ich 10 Anfrage gleichzeitig schicke, dann ist das ja in der Zeit zu schaffen.

Gruss Frickel
  Mit Zitat antworten Zitat
Basilikum

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

Re: Mehrere Thraeds gelichzeitig

  Alt 7. Apr 2004, 12:07
ich würde einen Master-Thread erstellen, der die Worker-Threads koordiniert... hier etwas Pseudo-Code:

Master-Thread:
Code:
while (more records available) do begin
  while not (less than 10 worker-threads running) do sleep;

  (start worker-thread with next record)
end
Worker-Thread:
Code:
(inc worker-thread-count)
(do work)
(dec worker-thread-count)
terminate
  Mit Zitat antworten Zitat
Frickel

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

Re: Mehrere Thraeds gelichzeitig

  Alt 7. Apr 2004, 12:24
HAllo,

Hallo Basilikum,

so ähnlich hatte ich es mir auch gedacht.
Hab mal einen anderen Ansatz verfolgt:


PROCEDURE TTestform.m_TimerTimer(Sender: TObject);
VAR
T_ARR: ARRAY OF T_TestThread;
i: Integer;
Begin
SetLength(T_ARR, 10);
FOR i := 1 TO 10 DO
T_ARR[i] := T_TestThread.Create(i);
End;

###############
Thread-Unit
UNIT AddressVerifaction;

INTERFACE

USES
Classes;

TYPE
T_TestThread= CLASS(TThread)
private
Buchstabe: Integer;
PROCEDURE UpdateMemo;
{ Private-Deklarationen }
protected
PROCEDURE Execute; override;
public
CONSTRUCTOR Create(aBuchstabe: Integer);
END;
VAR
B: STRING;
IMPLEMENTATION
USES SysUtils, main;
CONSTRUCTOR T_TestThread.Create(aBuchstabe: Integer);
BEGIN
INHERITED Create(True);
Buchstabe := aBuchstabe;
FreeOnTerminate := True;
Resume;
END;

PROCEDURE T_TestThread.Execute;
VAR
i: Integer;
BEGIN
FOR i := 1 TO 1000 DO
BEGIN
TRY
B:=chr(Buchstabe + 65) + ':' + intToStr(i);
Synchronize(UpdateMemo);
EXCEPT
ON e: Exception DO
BEGIN
B:=chr(Buchstabe + 65) + ':' + intToStr(i) + '#' + E.Message;
Synchronize(UpdateMemo);
END;
END;
END;
{ Thread-Code hier einfügen }
END;

PROCEDURE T_TestThread.UpdateMemo;
BEGIN
Testform.MnoReport.lines.add(b);
END;

END.

####

Bekomme aber nach Abarbeitung des Codes:

1. EInvalidPointer
2. EOSError:Systemfehler. Code 5

Was kann das sein??

Gruss Frickel
  Mit Zitat antworten Zitat
Basilikum

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

Re: Mehrere Thraeds gelichzeitig

  Alt 7. Apr 2004, 13:25
ein Problem dürfte dies hier sein:
Delphi-Quellcode:
VAR
  T_ARR: ARRAY OF T_TestThread;
  i: Integer;
Begin
  SetLength(T_ARR, 10);
  FOR i := 1 TO 10 DO
      T_ARR[i] := T_TestThread.Create(i);
End;
dynamische Arrays sind immer 0-basiert... korrekt wäre:
T_ARR[i - 1] := T_TestThread.Create(i); ein weiters Problem könnte die die asynchron laufende Methode UpdateMemo sein. In den Threads postest Du mittels Synchronize tausende von Messages in die Message-Queue... möglicherweise werden die letzden der Messages erst abgearbeitet, wenn der Thread bereits beendet ist, und die TThread-Klasse sich bereits freigegeben hat (FreeOnTerminate)... zu diesem Zeitpunkt ist dann natürlich der String B im Urwald....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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