AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Threads sollen auf einander warten... Wie am besten???
Thema durchsuchen
Ansicht
Themen-Optionen

Threads sollen auf einander warten... Wie am besten???

Ein Thema von romber · begonnen am 27. Aug 2008 · letzter Beitrag vom 28. Aug 2008
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Threads sollen auf einander warten... Wie am besten???

  Alt 27. Aug 2008, 22:33
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?
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Threads sollen auf einander warten... Wie am besten???

  Alt 27. Aug 2008, 22:42
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
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: Threads sollen auf einander warten... Wie am besten???

  Alt 27. Aug 2008, 23:20
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.
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#4

Re: Threads sollen auf einander warten... Wie am besten???

  Alt 27. Aug 2008, 23:31
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.
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Threads sollen auf einander warten... Wie am besten???

  Alt 28. Aug 2008, 11:25
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:01 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