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, > eine Frage zu threads habe ich noch, das habe ich noch nicht richtig verstanden. > Wenn ich die Proritäten von threads ändern möchte, dann starte ich die mit > <code> > run <i>Priorität;</i></code> > > Wenn ich das richtig verstanden habe, ist die Std.-Prio 32. Aber was heisst das jetzt konkret? > Habe ich sehr zeitkritische threads, wähle ich dann eine niedrige, oder eine hohe Priorität? > > Bsp. > Eine Funktion im main- thread überwacht eine Lichtschranke.Wenn ich durchgehe, wird eine > Beleuchtung eingeschaltet und es wird ein Timer-Thread gestartet, der das Licht zeitverzögert > wieder ausschaltet. > Das Problem dabei ist, dass der Impuls beim Durchlaufen sehr kurz ist und die Funktion > teilweise das Durchschreiten der IR nicht mitbekommt. Das hängt natürlich von der Länge der Loop- > Anweisung im main-thread ab.Deshalb der Gedanke, diese Funktionalität in einen thread mit einer > hohen Prio zu legen, damit die IR zuverlässig auslöst. Was muss ich dann für Prioritäten > vergeben? Welche Prio könnte der sekundengenaue Timer bekommen? > > ChristianS. > > Hier die IR-Funktion > <code> > function Ir () returns int > /******************************************************************************/ > /* Auswertung der Lichtschranke */ > /******************************************************************************/ > { > long t; > t=timeout[0]; //von int nach long konvertieren > t=t*1000; > if Nacht() //IR nur während nacht aktivieren > { > if ports.get(ir) and !ir_busy //warten auf seigende Flanke > { > //resetTimer(0); > ir_busy=-1; //Ir() hat High-Pegel > ir_on=system.timer(); //Zeitpunkt der steigenden Flanke > //hwcom.print(" IR steigende Flanke\r\n"); > } > if !ports.get(ir) and ir_busy //warten auf fallende Flanke > { > time.resetTimer(0); > ir_busy=0; > time.t_start[0]=-1; //damit der Timer bei Tag/Nacht- > //hwcom.print(" fallende Flanke\r\n"); //Übergang nicht startet > } > if ir_busy > if system.timer()-ir_on > t //...allerdings bei Timeout... > error_flag=-1; //..FehlerCode zurückgeben. > } > else > ir_busy=0; //IR am Tag inaktiv > return ir_busy; //Status zurückgeben > } //0:= Ruhezustand > //1:= High-Signal > /******************************************************************************/</code>