Nebenläufig programmieren

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

stefan-tiger
Posts: 33
Joined: Wed Mar 15, 2006 2:37 pm
Location: Pforzheim

Nebenläufig programmieren

Post by stefan-tiger »

Hallo,

ich habe ein grundsätzliches Problem. Wie prorgammiert man nebenläufig (mit C/C++) ?

Beispiel: Ich lasse beim Start meiner Anwendung, die LEDs meines IO-Warriors blinken.
Leider bleibt meine Anwenungs solange "stehen", was auch klar ist, da das Blinken mit zwei for-Schleifen realisiert ist.

Wie bekomme ich es nun hin, daß die LEDs blinken und die Anwendung in dieser Zeit bedienbar bleibt, bzw. anderen code abarbeitet?
Last edited by stefan-tiger on Wed Apr 05, 2006 10:55 am, edited 1 time in total.
wayoda
Posts: 362
Joined: Fri Dec 19, 2003 12:00 pm
Location: Wuppertal/Germany

Post by wayoda »

http://www.codeproject.com/threads/#Threads

hat eine Menge Tutorials zum Thema online.


Eberhard
stefan-tiger
Posts: 33
Joined: Wed Mar 15, 2006 2:37 pm
Location: Pforzheim

Post by stefan-tiger »

Ich hatte gehoffe, sowas wie mehrere Prozesse/Threads würde mir erspart bleiben.

Aber wenn es nicht anders geht....

EDIT: Ganz wichtig: Ich mache eine Cross-Plattfrom-Applikation (Windows und Linux). Sind diese Threads gleichermaßen auf Windows und Linux verfügbar?
stefan-tiger
Posts: 33
Joined: Wed Mar 15, 2006 2:37 pm
Location: Pforzheim

Post by stefan-tiger »

Ich werd woohl das hier nehmen:

http://doc.trolltech.com/4.1/qthread.html
HappyAura
Posts: 68
Joined: Sun Feb 27, 2005 2:13 pm

Post by HappyAura »

in delphi gibt es 'nen simplen timer, bei dem man, wenn er auslöst die LED's toggeln könnte, ich kann mir vorstellen, dass visual c++ express auch sowas ähnlicheswie 'ne timer componente hat. der timer ist nicht wirklch genau bei delphi, hat relativ niedirge priorität, was für ein "ich lebe und arbeite"-LED blinken aber eher irrelevant sein sollte...
gruß Martin
stefan-tiger
Posts: 33
Joined: Wed Mar 15, 2006 2:37 pm
Location: Pforzheim

Post by stefan-tiger »

HappyAura wrote:in delphi gibt es 'nen simplen timer, bei dem man, wenn er auslöst die LED's toggeln könnte, ich kann mir vorstellen, dass visual c++ express auch sowas ähnlicheswie 'ne timer componente hat. der timer ist nicht wirklch genau bei delphi, hat relativ niedirge priorität, was für ein "ich lebe und arbeite"-LED blinken aber eher irrelevant sein sollte...
gruß Martin
Ich mache alles OHNE IDE ;) nur mit Qt und dem iowkit.

Da ich später sehr (zeit-) präzise ein- und ausgeben will ich nicht schon zu Beginn mit "ungenauen timern" arbeiten.
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

Wie genau? Unter einer Millisekunde geht sowieso nichts, da sei USB vor.
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Dazu kommt dann noch die Frage nach dem Hostcontroller. OHCI Controller können zum IOW24 und IOW40 etwa 10 mal schneller Daten senden als UHCI Controller.

Was Threads und Prozesse angeht: Nebenläufigkeit bezieht sich genau auf Threads und Prozesse. Nebenläufig heisst, dass mehrere Threads oder Prozesse quasi-parallel auf einem Prozessor laufen (nicht wirklich parallel, weil ja ein Prozessor nicht zwei Dinge auf einmal machen kann). Parallele Threads und Prozesse dagegen setzen mehr als einen Prozessor voraus (egal ob echte Prozessoren, Hyperthreading oder Spezialprozessoren wie GPUs).
stefan-tiger
Posts: 33
Joined: Wed Mar 15, 2006 2:37 pm
Location: Pforzheim

Post by stefan-tiger »

Guido Körber wrote:.. Nebenläufig heisst, dass mehrere Threads oder Prozesse quasi-parallel auf einem Prozessor laufen (nicht wirklich parallel, weil ja ein Prozessor nicht zwei Dinge auf einmal machen kann). Parallele Threads und Prozesse dagegen setzen mehr als einen Prozessor voraus (egal ob echte Prozessoren, Hyperthreading oder Spezialprozessoren wie GPUs).
Eigentlich müsste ja jedes Spiel dann so aufgebaut sein, soviele Dinge wie da quasi-gleichzeitig ablaufen.
stefan-tiger
Posts: 33
Joined: Wed Mar 15, 2006 2:37 pm
Location: Pforzheim

Post by stefan-tiger »

Robert Marquardt wrote:Wie genau? Unter einer Millisekunde geht sowieso nichts, da sei USB vor.
So schnell muss es nicht sein, aber schon so, daß man nicht das Gefühl eines delays hat.

Später wird mit einem µC (PIC16) kommuniziert an dem Taster angeschlossen sind.
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

stefan-tiger wrote:So schnell muss es nicht sein, aber schon so, daß man nicht das Gefühl eines delays hat.
Das ist dann eine Frage der Anwendung.

Wenn es um Hand/Auge Koordination geht sind Regelschleifen unter 20msec ausreichend und ab ca. 10msec gibt es eigentlich auch keine Ausnahmebegabten mehr, die ein Delay spüren.

Bei Audio ist das was anderes, alles über 4-5 msec kann da schon richtig gruselig sein und spätestens bei 10-20msec hört es auch der völlig unmusikalische Mensch.
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

stefan-tiger wrote:Eigentlich müsste ja jedes Spiel dann so aufgebaut sein, soviele Dinge wie da quasi-gleichzeitig ablaufen.
Kann, muss aber nicht. Wenn die Spielmechanismen ausreichend einfach für die verwendete Plattform sind kann das mit einer statischen Loop abgehen. Beispielsweise viele 3D Shooter benutzen aber Threads, alleine schon um Netzwerk, Eingabe und Ausgabe zu entkoppeln. Zudem ist bei Verwendung von 3D ohnehin Threading notwendig, da sonst der Hauptprozessor sinnlos darauf warten würde, dass der Grafikprozessor fertig wird. Und man hat dann natürlich die Option Darstellungsprozesse besser zu skalieren, wird das Bild nicht fertig bevor was neues passiert fängt man halt das nächste an.
Werner
Posts: 4
Joined: Mon May 16, 2005 9:25 pm
Location: Freising
Contact:

Re: Nebenläufig programmieren

Post by Werner »

stefan-tiger wrote:Beispiel: Ich lasse beim Start meiner Anwendung, die LEDs meines IO-Warriors blinken.
Leider bleibt meine Anwenungs solange "stehen", was auch klar ist, da das Blinken mit zwei for-Schleifen realisiert ist.

Wie bekomme ich es nun hin, daß die LEDs blinken und die Anwendung in dieser Zeit bedienbar bleibt, bzw. anderen code abarbeitet?
Hallo Stefan,

Du benötigst dafür keine Threads, wenn Du mit einem Event-gesteuerten Framework, wie z.B. der MFC von MS oder QT arbeitest.
Unter http://www.salomon-freising.de/iow findest Du ein Beispiel (s. Tutorial) und eine kleine Lib für Digitalen IO.

Gruß
Werner
stefan-tiger
Posts: 33
Joined: Wed Mar 15, 2006 2:37 pm
Location: Pforzheim

Re: Nebenläufig programmieren

Post by stefan-tiger »

Werner wrote:...

Du benötigst dafür keine Threads, wenn Du mit einem Event-gesteuerten Framework, wie z.B. der MFC von MS oder QT arbeitest.
...
Ich habs mal mit Qt signals&slots probiert. Leider ohne erfolg.
alex_fhf
Posts: 12
Joined: Mon Nov 07, 2005 3:51 pm
Location: Rietheim

Post by alex_fhf »

Wenn du Cross-Plattform arbeiten möchtest, dann könntest du dich (u.U.) auch in C# (.NET Framework) einarbeiten. Habe den IOW24 unter Linux mit Mono 1.4 ansprechen und mein Programm wiederverwenden können. So habe ich denn ein Programm für Windows und für Linux.
Post Reply