read() Zeitproblem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

Mittwoch 16. August 2006, 15:49

Die Funktion read() (auf ein serial device) blockiert mir im falle, wenn keine Daten zum lesen verfügbar sind ca 750 millisekunden. Gibt es eine möglichkeit, wie ich die Funktion dazu bringen kann nach 100 millisekunden zu retournieren wenn keine Daten zum lesen vorhanden sind?
MFG
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Mittwoch 16. August 2006, 16:11

Ähm du bewegst dich also im millisekundenbereich und nennst das ein Zeitproblem? :shock:
mfg

Thomas :-)
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

Mittwoch 16. August 2006, 16:19

=D nun ja, wenn daraus (prototyp) irgendwann mal n stück code werden sollte das sich in einem embedded systems zurechtfindet dann schon. Dort wird natürlich die zeitspanne im mikrosekundenbereich sein da hast du recht.
Und trozdem ist es ein probelm, wie du sehen wirst, da ich die schnittstelle nicht nonblocking haben will....
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 16. August 2006, 18:13

gorba hat geschrieben:Gibt es eine möglichkeit, wie ich die Funktion dazu bringen kann nach 100 millisekunden zu retournieren wenn keine Daten zum lesen vorhanden sind?
Hi gorba!

Vielleicht, aber wirklich nur vielleicht -- kannst du damit etwas anfangen:
http://docs.python.org/lib/module-select.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

Donnerstag 17. August 2006, 06:31

wusst ichs doch. Meine Lieblingsfunktion.. hehe
In c hab ich mich einen Tag mit der Funktion rumgeschlagen, bis mir klar wurde, dass die select funktion auf nem bestimmten kernel nicht navollziehbare Ergebnisse liefert.
Unter Windows funktioniert das Ding leider nur auf Sockets.
Trozdem danke
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 17. August 2006, 07:53

gorba hat geschrieben:Unter Windows funktioniert das Ding leider nur auf Sockets.
Hi Gorba!

Das war mir klar, aber du hast keine genaue Angabe über das Betriebssystem gemacht.

So, und jetzt zu einer anderen Möglichkeit, die mir eingefallen ist:

- Ein Thread, der auf das serielle Signal wartet und die empfangenen Signale in eine Queue schreibt.

- Ein anderer Thread, der alle 50 ms nachsieht, ob es ein neues Signal in der Queue gibt, dieses ausliest und anzeigt.

Somit blockiert der erste Thread den anzeigenden Thread nicht.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

Donnerstag 17. August 2006, 08:01

klasse =D
Danke für die idee. Jo sry für die mangelhaften angabe, bin neu auf Windows und auf Python =S Aber ich seh schon, auch hier kann man kreativ sein =)
thx
Antworten