Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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)