Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Zusammen, > > ich habe Probleme mit einem Thread, der den Systemtimer verwendet. > Nach ca. 14 Tagen funktioniert er nicht mehr richtig, nach vier Wochen > werden die Fehlfunktionen so groß, daß ich einen Reset machen muß. > > Grundsätzlich stehe ich mit der long Variable auf Kriegsfuß; obwohl ich mich > meiner Meinung nach an die Spec halte, gibt es bei großen Zahlenwerten immer Probleme. > > Deshalb glaube ich auch, daß der große Zahlenwert des system.timer() Ursache für die > Probleme dieses Threads sind. Vielleicht erkennt ja einer von Euch sofort, was ich hier falsch mache. > > Anbei der Code. > Grundsätzliche Funktion des Threads: > Mehrere Funktionen nacheinander ausführen. > Beispiel: Jalousien runterfahren und nach 20 Sekunden abschalten > oder > Licht aufziehen, nach einiger Zeit runterdimmen, dann nach weiterer Zeit ganz ausschalten. > > Aktwert[a] ist der Aktor, der gesteuert wird > Aktwert[a+1] ist der Funtkionswert. Im Detail: > 0-9 sind Funktionen rund um Jalousiesteuerung > 10-19 sind Funktionen zur Relaissteuerung > 20-29 sind Funktionen für Lichtdimmung. > Aktwert[a+2] ist ein Parameter ( Wie weit sollen Jalousien fahren, wie hell das Dimmlicht usw.) > Aktzeit ist die Zeit in ms, die vergehen soll, bis die Aktwert-Funktion erneut aufgerufen wird. > > Aktwert[a], Aktwert[a+1] und Aktwert[a+2] werden in einer anderen Funktion befüllt. > Nach deren Befüllung wir das Aktflag auf 1 gesetzt, damit folgender Thread aktiv wird: > > thread Ueberwachung > { > int a,wert; > long wart; // wart ist der Zeitpunkt wann reagiert werden soll. > // Reagiert wird, sobald system.timer() größer wart wird. > a=0; > > wait ((wart - system.timer()<=0) or Aktflag); // Solange wart-wert noch nicht erreicht. > wart = system.timer()+3600000; // jede Stunde zumindest ein Lauf. > Aktflag=0; // Interuptflag zurücknehmen. > > while Aktwert[a]!= ENDE // Schleife durchführen > { > if Aktwert[a] == LEER // Wenn Aktwert[a]==LEER und nächster Eintrag > { // ist ENDE, wir das ENDE um einen Eintrag > if Aktwert[a+3]==ENDE Aktwert[a]=ENDE; // vorgeholt. > } > else > if (Aktzeit[a]-system.timer()) <= 0 // Ist diese Aktzeit überschritten? > { > if Aktwert[a+1] < 10 // Jalousien steuern > { > if Aktwert[a+1] == 0 // Modus 0 = Jalousie hoch bis Endschalter > { > dwmodule.JalAbs(JalZi[Aktwert[a]],Auf); // Jalousie hochfahren > sleep 100; > Aktzeit[a]=system.timer()+30000; // neue Aktzeit = 30 Sec > Aktwert[a+1]=1; // Modus auf 1 hochsetzen > } > else if Aktwert[a+1] == 1 // Modus 1 = Jalousien runterfahren. > { > if Aktwert[a+2] dwmodule.JalAbs(JalZi[Aktwert[a]],Ab); // Jalousie runterfahren, wenn angegeben. > sleep 100; // verhindert das Kleben der Relais > if Aktwert[a+2] == 1 Aktzeit[a]=system.timer()+4000; // Jalousie viertel runterfahren > else if Aktwert[a+2] == 2 Aktzeit[a]=system.timer()+8000; // Jalousie halb runter > else if Aktwert[a+2] == 3 Aktzeit[a]=system.timer()+12000; // Jalousie ganz runter > else if Aktwert[a+2] == 4 Aktzeit[a]=system.timer()+21000; // Jalousie ganz runter > Aktwert[a+1]=2; // Modi auf 2 hochsetzen > } > else if Aktwert[a+1] == 2 // Jalousien stoppen > { > dwmodule.JalAbs(JalZi[Aktwert[a]],Stop); > sleep 100; > Aktwert[a]=LEER; // Auftrag aus Aktwert löschen. > } > } > else if Aktwert[a+1] < 20 // Relais steuern > { > } > else if Aktwert[a+1] < 30 // Dimmer steuern > { > } > } > if (wart-Aktzeit[a]) > 0 wart=Aktzeit[a]; // die kürzeste Wartzeit in wart eintragen > a=a+3; // nächsten Aktwert Eintrag prüfen. > } > }