Re: hwcom sync-Probleme? Kategorie: Programmierung (von André H. - 5.08.2003 8:45) | |
Als Antwort auf Re: hwcom sync-Probleme? von Rolf - 4.08.2003 16:00
| |
Hallo Rolf, > Mit if !(system.timer() % 10) yield(); an Anfang des Threads wird der Thread nur alle 10 ms ausgeführt > und sonst die Kontrolle an das OS als an die Threadfunktion für die Glove-Auswertung abgegeben. Das ist nicht ganz richtig. Diese If-Anweisung sorgt dafür, da� genau einmal ein Threadwechsel ausgeführt wird Der Thread wird aber auf jeden Fall öfters ausgeführt. (Wie oft, ist abhängig von der Anzahl der Threads, der Prioritäten und der Art der ausführenden Anweisungen.) Wenn also irgendwo thread xyz { if !(system.timer() % 10) yield; ... ... } steht, wird ein yield zwar einmal die Prio abgeben, jedoch wird der folgende Code auf jeden Fall ausgeführt, auch wenn noch keine 10ms vergangen sind. Auch wird sicher dieses yield; in mind. 95% der Thread-Durchläufe ausgeführt, da die Wahrscheinlichkeit, da� der Timer zu diesem Zeitpunkt einen durch 10 teilbaren Wert hat, sehr gering ist. Eine funktionierende Alternative wäre: long timer; thread xyz { timer=system.timer() loop { wait system.timer()-timer>=10; timer=timer+10; ... ... } } Man könnte auch einfach mit sleep 10 arbeiten. Jedoch kommen hier bei Multithreading meist Laufzeiten von etwas mehr 10ms raus. Wenn es also nicht auch "exakt" 10ms ankommt, sollte man mit sleep arbeiten. MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | |
Antwort schreiben Antworten: Re: hwcom sync-Probleme? (von Rolf - 5.08.2003 12:20) Re: hwcom sync-Probleme? (von Rolf - 5.08.2003 13:25) Re: hwcom sync-Probleme? (von Fischi - 5.08.2003 13:45) |