Programm aufteilen in Threads

03/06/2008 - 15:24 von Jürgen Schildmann | Report spam
Hi,
ich habe ein Programm, das Messdaten von einer CCD-Kamera bekommt und
diese in Form von Messkurven darstellt. Dies tut das Programm
sequentiell. Nun würde ich gerne die Messroutine von der Anzeige
entkoppeln, da die die Daten der Kamera so schnell es geht speichern
möchte und die Anzeige nur zwischendurch aktualisiert werden muss. Ich
möchte diese beiden Aufgaben gerne in 2 Threads verpacken, wobei der
Anzeige-Thread eine Freigabe an den Mess-Thread gibt, dass er bereit
ist, etwas darzustellen.
Der Mess-Thread soll dann die aktuellen Daten an den Anzeige-Thread
übergeben, der das Ganze dann darstellt.

Wie mache ich das am geschicktesten ?

Gruß,
Jürgen
 

Lesen sie die antworten

#1 Frank Dzaebel
04/06/2008 - 08:08 | Warnen spam
Hallo Jürgen,

Nun würde ich gerne die Messroutine von der Anzeige
entkoppeln, da die die Daten der Kamera so schnell es
geht speichern möchte und die Anzeige nur
zwischendurch aktualisiert werden muss.



Eins sollte zunàchst klar sein:
Auf einem Rechner mit *einem* Prozessor
muss der "Kamera-Thread" auf jeden Fall
kurz warten, wenn die Anzeige aktualisiert bzw.
soll und Steuerelement-Werte modifiziert
werden sollen. In solchen Szenarien ist ein
simples "Control.Invoke" aus dem "Kamera-Thread"
also eine Möglichkeit, ohne einen expliziten zusàtzlichen
Thread zu benutzen (der sowieso schon existiert).

[Bearbeiten von Steuerelementen aus Threads]
http://dzaebel.net/ControlInvoke.htm



Ich möchte diese beiden Aufgaben gerne in 2
Threads verpacken, wobei der Anzeige-Thread eine
Freigabe an den Mess-Thread gibt, dass er bereit
ist, etwas darzustellen.



Das "der Anzeigethread bereit ist", braucht er
kaum global zu übermitteln, denn der ist so
unterbeschàftigt, das im Vergleich zum Kamerathread
ja eh "bereit" ist. Da benötigst Du nur "Control.Invoke",
Der Threadkontext wird dann gewechselt.


Der Mess-Thread soll dann die aktuellen Daten
an den Anzeige-Thread übergeben, der das Ganze dann darstellt.



Du kannst hier ja aus dem Kamerathread direkt in
die Steuerelemente schreiben. Ansonsten bietet:

[ParameterizedThreadStart-Delegat (System.Threading)]
http://msdn.microsoft.com/de-de/lib...start.aspx

ein einfaches Verfahren Daten an eine Threadprozedur zu übergeben.


___________
Wenn Du mehrere Prozessoren hast, können sich u.a.
auch folgende Möglichkeiten anbieten:

[Parallel LINQ: Ausführen von Abfragen auf Mehrkernprozessoren]
http://msdn.microsoft.com/de-de/mag...63329.aspx

[Parallele Leistung: Optimieren von verwaltetem Code für Mehrkerncomputer]
http://msdn.microsoft.com/de-de/mag...63340.aspx

[Download details: Parallel Extensions to .NET Framework 3.5 June 2008 CTP]
http://www.microsoft.com/downloads/...laylang=en

[Der Threadpool: Verbessern der Skalierbarkeit mit neuen Threadpool-APIs]
http://msdn.microsoft.com/de-de/mag...63327.aspx

[Details zur Veranstaltung: Parallel Linq (Teil 1 von 3) [1032380407] -
Microsoft Deutschland GmbH]
http://www.microsoft.com/germany/ms...ry.aspx?id32380407


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen