Autor |
Beitrag |
mannyk
      
Beiträge: 83
Erhaltene Danke: 1
|
Verfasst: Di 25.05.10 13:42
Hallo,
ich habe einen Thread, der gewisse Berechnungen in einer Endlosschleife durchführt.
Nun möchte ich, dass nach jeder Berechnung das Ergebnis abgefragt werden kann.
Kann ich dies mit Streams machen oder gibt es eine bessere Möglichkeit?
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Di 25.05.10 14:28
Ich glaube, du hast eine etwas falsche Vorstellung von Streams  .
Bezieht sich "abgefragt" auf die GUI? Dann schau dir einmal den BackgroundWorker an, der übernimmt bereits die Synchronisierung zwischen UI- und Nebenthread. Oder gleich Control.Invoke, was auch nicht umständlicher ist, aber man sollte schon einmal etwas von Delegates gehört haben.
_________________ >λ=
|
|
mannyk 
      
Beiträge: 83
Erhaltene Danke: 1
|
Verfasst: Di 25.05.10 15:26
Hallo,
nein, es geht nicht um eine GUI.
Es gibt einfach einen Thread, der immer läuft und der bestimmte Werte generiert. Diese generierten Werte möchte ich mit einem anderen Programm lesen. Also braucht der Thread irgendeine Kommunikationsanbindung.
Ich habe dies jetzt mit StringWriter/StringReader und einem StringBuilder realisiert. Keine Ahung ob das elegant ist, aber funktionieren tut es
Lg
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Di 25.05.10 16:36
Also keine Threads, sondern Prozesse...
Wenn du "professionellere" Varianten als über eine Textdatei suchst (wie informierst du dort das andere Programm, dass neue Daten verfügbar sind?), solltest du unter dem Stichwort IPC fündig werden.
_________________ >λ=
|
|
mannyk 
      
Beiträge: 83
Erhaltene Danke: 1
|
Verfasst: Di 25.05.10 21:51
Nein, nein. Es handelt sich ganz sicher um Threads. ^^
Ich habe den einen Thread als BackgroundWorker implementiert. Und der Worker soll eben eine Connection zu demjenigen Thread haben, der diesen gestartet hat.
Ich nehme an, dass sich "ReportProgress()" dafür auch eignen könnte. Ich fand es dennoch nicht so elegant, da mein Thread ja immer läuft und keinen prozentmäßigen Fortschritt übermittelt.
Lg
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 26.05.10 00:37
|
|
mannyk 
      
Beiträge: 83
Erhaltene Danke: 1
|
Verfasst: Mi 26.05.10 13:58
Sorry, das mit dem "Programm" war doch sehr missverständlich.
Der 1. Thread ist der eigentliche Einstiegspunkt, sprich die die Main-Methode.
Der 2. Thread ist derjenige Thread, den ich explizit instanziere und welcher die Berechnungen ausführt.
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mi 26.05.10 14:13
mannyk hat folgendes geschrieben : | Der 1. Thread ist der eigentliche Einstiegspunkt, sprich die die Main-Methode. |
Und, wofür ist er zuständig? Wenn es keine GUI ist, was dann, eine Konsole? Warum muss das Ergebnis von diesem Thread aus abgefragt werden?
Wie die Synchronisierung erfolgen muss, hängt letztendlich ganz von deinen Daten ab. Aber ab .NET 4 könnten dir Klassen wie BlockingCollection, die für solche Producer-Consumer-Szenarien bestimmt sind, sicher weiterhelfen.
_________________ >λ=
|
|