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 Fischi - 5.08.2003 13:45)
Als Antwort auf Re: hwcom sync-Probleme? von Rolf - 5.08.2003 13:25

Dank Dir Rolf, dass Du nochmal soviel ergänzt hast und die Problematik genauer veranschaulicht hast!
Ihr werdet recht haben, ich muÃ? mich auf jeden Fall jetzt erst einmal mit Threads auseinander setzten.

Herzlichen Dank Euch beiden!

GruÃ? Fischi


########



> > Hallo André,
> >
> > > > 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.)
> >
> > Ã?h.. Sekunde... wenn ich das richtig sehe, wird ein Thread neu gestartet nachdem er durchlaufen wurde.
> > Wird ein Thread 1000 mal pro Sek durchlaufen, wird er auch 1000 mal neu gestartet.
> > Setze ich diese (meine) Abfrage an den Anfang, so wird doch so oft mit yield; an andere Thread abgegeben bis
> > timer % 10  einen graden Wert ergibt, also 10 ms um sind.
> > Bei einem Thread der 1 Sek. läuft bis er neu gestartet wird, nutzt das natürlich kaum was.
> > Evtl. wäre daher ein Wert wie timer % 50 oder timer % 25 besser...  das müste man dann ausprobieren.
> > Aus Deiner Darstellung lerne ich, das yield für das Tasking nicht gleichzusetzen mit einem break einer
> > for-Schleife ist. Das dachte ich bisher nämlich. Wenn yield nur eine "Unterbrechung" verursacht, und keinen
> > Threadwechsel, dann sieht das natürlich anders aus. Ich hatte das Handbuch allerdings so interpretiert.
>
> Ich hab jetzt erst richtig verstanden, wo Du drauf hinaus willst...
> Demnach würde aber ein
>
> thread main
>  {
>   loop
>     if !(system.timer() % 10) yield(); //Taskwechsel erzwingen
>     else break; //verlassen der loop
> ...
> ...
> ...
>  }
>
> gehen.
> Nur wäre das tatsächlich einem sleep 10 fast gleich zu setzen bzw. sleep verbraucht deutlich weniger
> VM-Instruktionen... was einem anderen Thread dann zu Vorteil kommt. So also...
>
> thread main
>  {
>   sleep 10;
> ...
> ...
> ...
>  }
>
> Also Fischi... das da unten ist der Weisheit lezter SchluÃ?.... :-)
> Konstruktives Nachdenken ist durch nichts zu ersetzen :-) Danke André.
> GruÃ? Rolf
>


    Antwort schreiben


Antworten: