Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 2 Fragen zu Threads (https://www.delphipraxis.net/111287-2-fragen-zu-threads.html)

kcx 1. Apr 2008 16:39


2 Fragen zu Threads
 
Hallo,

Ich habe mal 2 kurze Fragen, im Umgang mit Threads.

1. Wenn ich mit mehreren Threads in eine Datei schreibe, sollte man das Beschreiben der Datei, also "WriteLn(Datei, 'text')" mit einer CriticalSection o.Ä schützen oder ist das unnötig?

2. Ich starte in einer Konsolenanwendung mehrere Threads und möchte jetzt, dass sich die Konsolenanwendung erst beendet, wenn alle Threads fertig sind. Bisher habe ich das mit einer global Boolean Variable gemacht und einfach "while bWorking do Sleep(1000)"; im Thread incrementiere ich dann eine Variable und wenn diese gleich der gestarteten Threads ist, wird "bWorking" auf "false" gesetzt, und die Anwendung kann sich beenden. Geht das auch besser, sodass die Anwendung auch noch reagiert, was bei "Sleep" ja nicht der Fall ist?

Danke

Dani 1. Apr 2008 17:10

Re: 2 Fragen zu Threads
 
Hi!

Zitat:

Zitat von kcx
1. Wenn ich mit mehreren Threads in eine Datei schreibe, sollte man das Beschreiben der Datei, also "WriteLn(Datei, 'text')" mit einer CriticalSection o.Ä schützen oder ist das unnötig?

Ja, Zugriffe auf gemeinsame Daten sollte man grundsätzlich synchronisieren.

Zitat:

Zitat von kcx
2. Ich starte in einer Konsolenanwendung mehrere Threads und möchte jetzt, dass sich die Konsolenanwendung erst beendet, wenn alle Threads fertig sind. Bisher habe ich das mit einer global Boolean Variable gemacht und einfach "while bWorking do Sleep(1000)"; im Thread incrementiere ich dann eine Variable und wenn diese gleich der gestarteten Threads ist, wird "bWorking" auf "false" gesetzt, und die Anwendung kann sich beenden. Geht das auch besser, sodass die Anwendung auch noch reagiert, was bei "Sleep" ja nicht der Fall ist?

Ja das geht. TThread besitzt ein OnTerminate-Ereignis, das aufgerufen wird, wenn der Thread terminiert. Dort kannst du z.B. prüfen, ob es der letzte Thread war.

SirThornberry 1. Apr 2008 17:16

Re: 2 Fragen zu Threads
 
@kcx: Erstelle bitte für jede Frage ein eigenes Thema :-) Das hat den Vorteil das es übersichtlicher bleibt und man auch der Titel aussagekräftig das Problem beschreiben kann. Dadurch ist das ganze wiederum über die Suchfunktion gut zu finden und andere die das gleiche Problem haben finden die Lösung über die Suche und müssen nicht nochmal die gleiche Frage stellen.



*** geschlossen ***



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