AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff zwischen zwei Threads

Ein Thema von faux · begonnen am 12. Sep 2005 · letzter Beitrag vom 21. Sep 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

Zugriff zwischen zwei Threads

  Alt 12. Sep 2005, 12:45
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
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: Zugriff zwischen zwei Threads

  Alt 12. Sep 2005, 14:11
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.
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Zugriff zwischen zwei Threads

  Alt 12. Sep 2005, 17:51
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
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: Zugriff zwischen zwei Threads

  Alt 12. Sep 2005, 18:27
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.
  Mit Zitat antworten Zitat
Benutzerbild von Speedmaster
Speedmaster

Registriert seit: 4. Mär 2005
Ort: Karlsruhe
535 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Zugriff zwischen zwei Threads

  Alt 12. Sep 2005, 18:31
Kann man den Thread eigentlich Pausieren?
Felix K.
Zitat:
Siehst du diesen Park da unten?
Jeden Tag lernen sich leute kennen und verlassen einander, und du hast dein ganzes Leben Zeit darin zu gehen!
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

Re: Zugriff zwischen zwei Threads

  Alt 12. Sep 2005, 18:43
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
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Zugriff zwischen zwei Threads

  Alt 12. Sep 2005, 23:30
Zitat von Olli:
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?
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#8

Re: Zugriff zwischen zwei Threads

  Alt 12. Sep 2005, 23:34
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.
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Zugriff zwischen zwei Threads

  Alt 12. Sep 2005, 23:42
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
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Zugriff zwischen zwei Threads

  Alt 12. Sep 2005, 23:48
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 00:47 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