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

Re: Wait wartet nicht Kategorie: Programmierung (von Michi, http://www.elektronik.co.at - 30.05.2007 17:34)
Als Antwort auf Wait wartet nicht von Mark - 28.05.2007 14:10
Ich nutze:
C-Control II Unit, OSOPT V3.0
Hallo Mark !

Ich kann mich dunkel erinnern, daÃ? ich einmal zum SchluÃ? gekommen bin, daÃ? in der wait Abfrage
keine Berechnung stehen darf. Ich habe die Berechnung dann in eine Funktion getan und diese in wait
aufgerufen, dann ist es gegangen.

Sleep ???
Ich war fest überzeugt, da� sleep absichtlich genau dazu da ist, allen anderen threads sofort wieder
Zeit zu geben. Da� sleep also nicht "die anderen threads leistungsmä�ig nach unte zieht".
Jedenfalls nehme ich immer sleep um den anderen Tasks mehr Leistung zu geben. Falsch ???
Ich habe es noch nicht ausprobiert.
Ich hätte gadacht, da� die timer Berechnung mit wait mehr Rechenzeit braucht als ein sleep (das vom
Betriebssystem abgefragt wird).

system.timer:
dieser hat die Bösartigkeit, da� er nach minus umschlägt, wenn er überläuft (wie alle Zahlen).
Führt zu Programmen, die "seltsamerweise nach langer zeit spinnen,
aber nach reset wieder aus unerklärlichen Grunden laufen. Mu� wohl ein Störimpuls gewesen sein".
Mü�te man also abfangen oder es ist eine einmalige Störung beim Umschlag, die ignoriert werden kann.

Michi

> Hallo!
> Ich verzweifle grade an simpelsten Abläufen! Folgenden Code habe ich:
>
> long timer;
>
> thread regeln
> {
> loop{
> timer=system.timer();
> do something....;
>
> wait timer+10000<=system.timer();
> }
> }
>
> main {
> run regeln;
> do something else...;
> }
>

> Aus dem Main-Thread soll also einfach nur der Thread "Regeln" aufgerufen werden, in dem
>  dann eine Schleife abläuft und alle 10 Sekunden etwas tun soll. Das Problem dabei ist, dass sie
> nicht 10 Sekunden wartet, sondern direkt weiter macht. Ich habe auch schon ausprobiert, das Ganze
> ohne die Schleife zu machen, aber auch das funktionierte nicht. Wenn ich allerdings ein einfaches sleep
> 1000 reinsetze, pausiert er, zieht aber die anderen Threads leistungstechnisch nach unten.
> Hat jemand eine Idee, woran es liegen könnte oder wie ich das Problem elegant umgehen könnte?
> Viele Grü�e,
> Mark
>
>

Meine Seite: http://www.elektronik.co.at


    Antwort schreiben


Antworten: