Re: threads Kategorie: Programmierung (von ChristianS - 10.11.2010 20:17) | ||
Als Antwort auf threads von ChristianS - 2.11.2010 23:29 | ||
| ||
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 run <i>Priorität;</i> 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 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 Flankern"); } 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 Flankern"); //�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 /******************************************************************************/ | ||
Antwort schreiben Antworten: |