Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   C# Zugriff zwischen zwei Threads (https://www.delphipraxis.net/53207-zugriff-zwischen-zwei-threads.html)

faux 12. Sep 2005 11:45


Zugriff zwischen zwei Threads
 
Hallo!

Da ich mich mit Threads nicht auskenne, habe ich zwei simple Fragen:

Ich habe einen Thread in dem nur eine Schleife läuft.
1. Wie kann ich aus diesem Thread herraus eine Komponente des Formulars (das ja logischerweise in einem anderen Thread - im Hauptthread läuft) aufrufen?

2. Beendet sich der Thread automatisch nach ablauf der Schleife, oder muss ich das selbst machen?

Danke schon mal für jede Antwort
Grüße
Faux

Olli 12. Sep 2005 13:11

Re: Zugriff zwischen zwei Threads
 
Zu 2.: Ja, der Thread beendet sich. Allerdings weiß ich nicht, dazu befragst du am besten die Doku, ob das Thread-Objekt (also der .NET-Wrapper) auch freigegeben wird.

Einen Zugriff sollte man immer synchronisieren. Wei du das in .NET machst, ist mir allerdings unbekannt. Außerdem wäre da noch da Problem, daß die eigentlichen drunterliegenden APIs nicht alle threadsafe sind. Ob es die angebotenen Objekte also sind, ist noch eine andere Frage.

faux 12. Sep 2005 16:51

Re: Zugriff zwischen zwei Threads
 
Danke für die Antwort!

Wie könnte ich ansonsten das folgende Problem lösen:

Ich berechne in einer FOR-Schleife, die in einem eigenständigen Thread läuft, pro Durchlauf einen String. Nach jedem Durchlauf soll dieser String dann in eine Komponente (listView) geschrieben werden.
Auf die Komponente kann ich aber nicht einfach so zugreifen, da diese ja in einem seperaten Thread läuft...

Bin für jeden Vorschlag dankbar.
Grüße
Faux

Olli 12. Sep 2005 17:27

Re: Zugriff zwischen zwei Threads
 
Zitat:

Zitat von faux
Ich berechne in einer FOR-Schleife, die in einem eigenständigen Thread läuft, pro Durchlauf einen String. Nach jedem Durchlauf soll dieser String dann in eine Komponente (listView) geschrieben werden.
Auf die Komponente kann ich aber nicht einfach so zugreifen, da diese ja in einem seperaten Thread läuft...

Richte soetwas wie eine gemeinsame Ablage ein (zum Beispiel über Memory Mapped Files). Dort lagerst du dann den aktuellen String und signalisierst dem Hauptthread, daß etwas zur Abholung bereitliegt. Sobald der Hauptthread fertig ist, löscht er die Ablage und signalisiert, daß er fertig ist. Auf einer der beiden Seiten müßtest du dann einen Warteschlangenmechanismus implementieren.

Speedmaster 12. Sep 2005 17:31

Re: Zugriff zwischen zwei Threads
 
Kann man den Thread eigentlich Pausieren?

Olli 12. Sep 2005 17:43

Re: Zugriff zwischen zwei Threads
 
Sollte gehen, aber was soll das bringen? Im Gegensatz zu Fibers ist das nicht sonderlich gut steuerbar. Am sichersten ist es, wenn sich ein Thread selber schlafenlegt.

Stichwort: Suspend

faux 12. Sep 2005 22:30

Re: Zugriff zwischen zwei Threads
 
Zitat:

Zitat von Olli
Zitat:

Zitat von faux
Ich berechne in einer FOR-Schleife, die in einem eigenständigen Thread läuft, pro Durchlauf einen String. Nach jedem Durchlauf soll dieser String dann in eine Komponente (listView) geschrieben werden.
Auf die Komponente kann ich aber nicht einfach so zugreifen, da diese ja in einem seperaten Thread läuft...

Richte soetwas wie eine gemeinsame Ablage ein (zum Beispiel über Memory Mapped Files). Dort lagerst du dann den aktuellen String und signalisierst dem Hauptthread, daß etwas zur Abholung bereitliegt. Sobald der Hauptthread fertig ist, löscht er die Ablage und signalisiert, daß er fertig ist. Auf einer der beiden Seiten müßtest du dann einen Warteschlangenmechanismus implementieren.

Würde das Programm dadurch nicht extrem an Performance verlieren?

Olli 12. Sep 2005 22:34

Re: Zugriff zwischen zwei Threads
 
Zitat:

Zitat von faux
Würde das Programm dadurch nicht extrem an Performance verlieren?

Wieso sollte es? Ich gehe doch mal davon aus, daß du den zweiten Thread nur laufen läßt, weil die Verarbeitung der Strings besonders zeitaufwendig ist. Wenn dem so ist, dürfte der Overhead durch genanntes Prinzip vernachlässigbar sein.

faux 12. Sep 2005 22:42

Re: Zugriff zwischen zwei Threads
 
Ja, das ist schon richtig so, nur wie würdest du das lösen?
Ich würde eine Globale Variable haben, in die der Thread seinen String schreibt. Der Overhead Nimmt dann den String und macht was damit, dann wird der String wieder gelöscht. Der Thread wartet enzwischen auf das Löschen des Strings und fährt dann fort.
NUR:
Wie weißt der Overhead, dass der String jetzt bereit ist? Dan müsste ich ja erst wieder im Overhead ne Schleife laufen lassen, oder?

Kann sein, dass du das jetzt GANZ anders meinst... ;)
Bitte nen mal kurz ein Bsp, wenn das so ist...

Grüße
Faux

Luckie 12. Sep 2005 22:48

Re: Zugriff zwischen zwei Threads
 
Zitat:

Zitat von faux
Wie weißt der Overhead, dass der String jetzt bereit ist? Dan müsste ich ja erst wieder im Overhead ne Schleife laufen lassen, oder?

Ich glaube, hier gibt es noch ein Problem mit dem Begriff Overhead. ;) Als Overhead bezeichnet man das, was zusätzzlich dazu kommt, ohne zur Lösung des Problemes effektiv beizutragen, also Code, Ressourcen usw. Machen tut ein Overhead gar nichts, außer dass er da ist und speicher verbraucht. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 Uhr.
Seite 1 von 2  1 2      

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