Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Threads sollen auf einander warten... Wie am besten??? (https://www.delphipraxis.net/119517-threads-sollen-auf-einander-warten-wie-am-besten.html)

romber 27. Aug 2008 22:33


Threads sollen auf einander warten... Wie am besten???
 
Ich habe zwei Threads. Schon im constuctor Create des Thread1 wird den Thread2 erzeugt. Thread1 erzeugt den Thread2 und macht seine Aufgabe weiter. Am Ende wartet den Thread1 auf Thread2, falls dieser noch aktiv ist. Wenn Thread2 seine Aufgabe schneller erledigt, soll er auf Thread1 warten. Wie mache ich das am Besten?

Meflin 27. Aug 2008 22:42

Re: Threads sollen auf einander warten... Wie am besten???
 
Abgesehen davon, dass ich nicht ganz verstehe, worauf ein Thread warten soll, wenn er seine Aufgabe erfüllt hat, wäre eine simple Möglichkiet folgende:

Du legst dir zwei Variablen zu, ThreadAFinished und ThreadBFinished (Boolean). Dann kannst du in beiden Threads ganz einfach am Ende
Delphi-Quellcode:
Thread*Finished := true;
while not (ThreadAFinished and ThreadBFinished) do
  Sleep(0);
machen ;) Das ganze am besten über eine Hier im Forum suchenTCriticalSection absichern.

Oder wo ist das Problem :gruebel:

romber 27. Aug 2008 23:20

Re: Threads sollen auf einander warten... Wie am besten???
 
Da Problem ist folgendes:
Ich habe ein kleines Server, der die Daten analysiert und an die verbundenen Clients sendet. Manchmal werden einige Informationen benötigt, die von verschiedenen Quellen stammen, jedoch in einem Datensatz an die Clients abgeschickt werden müssen. Um Zeit zu sparen, möchte ich es mit zwei Threads lösen, die am Ende die gewonnenen Daten zusammenfügen zum Abschicken freigeben.

gsh 27. Aug 2008 23:31

Re: Threads sollen auf einander warten... Wie am besten???
 
Du könntest es auch über zwei Events lösen.
Sobald beide Events ausgelöst wurde sind beide Threads fertig

Dann kannst du dir die Critical Sections sparen.

OlafSt 28. Aug 2008 11:25

Re: Threads sollen auf einander warten... Wie am besten???
 
Solche Konstrukte sind prädestiniert für die gefürchteten Deadlocks (Thr1 wartet auf Thr2, welcher auf Thr1 wartet). Man läßt, wenn überhaupt, nur einen Thread warten, um solche bösen Fallen von vornherein zu entschärfen.

Wenn Thr1 also weitere Workerthreads startet (in diesem Falle Thr2) dann wartet Thr1 eben auf Thr2. Diese Wartezeit kann durchaus Null betragen, wenn Thr2 schnell fertig wird. Ich würde dies über einen TEvent lösen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 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