Autor Beitrag
mannyk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Di 25.05.10 14:28 
Ich glaube, du hast eine etwas falsche Vorstellung von Streams :gruebel: .

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 26.05.10 00:37 
user profile iconmannyk hat folgendes geschrieben Zum zitierten Posting springen:
Nein, nein. Es handelt sich ganz sicher um Threads. ^^
Aha. Und warum schreibst du dann
user profile iconmannyk hat folgendes geschrieben:
606688)][...]möchte ich mit einem anderen Programm lesen.
:?:

user profile iconmannyk hat folgendes geschrieben Zum zitierten Posting springen:
nein, es geht nicht um eine GUI.
Wofür ist dann der zweite Thread zuständig?

_________________
>λ=
mannyk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 83
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 26.05.10 14:13 
user profile iconmannyk hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
>λ=