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 André > > > Viele Dank für die ausführliche Antwort. > > Da sieht man den Spezialisten der C-contol II. > Die Lösung 2 ist eine intressante Möglichkeit. Ich werde zuerst mit einer > Weiche probieren. Für mich als Leihe einfacher. > > Mfg > > Lorenz aus Südtirol > > > > > > > > > Hallo Lorenz, > > > > Grundlagen C2: > > Funktionen können nur Werte und Variablen bzw. Referenzen auf Variablen(Arrays) > > übergeben werden. > > Ein Thread ist keines davon. Deshalb kann dies auch nicht übergeben werden. > > > > Nun zum Problem: > > Die Schlüsselworte zur Threadkontrolle erwarten die Threadnummer als Konstante. > > D.h. diese wird einkompiliert. (siehe vmcodes.c2) > > Wenn man mit run, halt, resume, reset arbeitet führt daran kein Weg vorbei. > > Es gibt zwei Möglichkeiten: > > 1. Du baust Dir eine Weiche. > > Mit If-Anweisungen wählst Du die entsprechenden Threads aus. > > 2. Du arbeitest mit einem kleinem Trick. > > Ich hatte im Zusammenhang mit einem anderem Problem vor langer Zeit eine direktere > > Möglichkeit der Thread-Kontrolle aufgezeigt: > > <a href="lesen.php?eintrag=14514">Re: Funktions/Thread-Definitionen</a> vom 11.05.2008 > > Einziger Nachteil: Du mußt die Thread-ID in Erfahrung bringen. Ändert sich die Reihenfolge > > der Threads, anderen sich auch die IDs. Diese werden von Oben nach unten > > bei 1 beginnend zugewiesen. Der Mainthread (der unterste) hat die höchste ID. > > Sinnvoll ist es, wenn die Threads Ihre IDs selbst verraten. Dazu müssen alle Threads > > bei Programmstart kurz anlaufen. > > > > z.B.: > > <code> > > byte ThreadID[32]; Array für bis zu 32 Threads > > const Thread_irgendwas=1; > > const Thread_wasanderes=2; // Der Index hat nichts mit der ID zu tun > > //dies Dient nur zu leichteren Verwendung. Man kann die IDs natürlich > > //auch in einzelne Bytevariablen speichern. > > > > thread irgendwas > > { > > ThreadID[Thread_irgendetwas]=TID(); > > halt;// Wichtig, wenn der Thread nicht sofort weiterlaufen soll. > > // Kann entfallen, wenn die ThreadID erst nach dem ersten vorgesehenem run benötigt wird. > > loop // Eigentlicher Threadinhalt > > { > > //... > > } > > } > > > > thread irgendwas > > { > > ThreadID[Thread_wasanderes]=TID(); > > halt; > > loop // Eigentlicher Threadinhalt > > { > > //... > > } > > } > > </code> > > > > Die Threads können dann mit setPrio() beinflußt werden. > > Eine Priorität von 0 heißt, daß der Thread steht. > > 1 bis 255 heißt, er soll mit der entsprechenden Prio laufen. > > > > Bei dieser Lösung kann weiterhin parallel mit den Schlüsselworten gearbeitet werden. > > Der Vorteil dieser Lösung ist, daß man nicht den Einschränkungen des Single-Pass-Compilers > > unterliegt, sondern auch ein weiter oben stehender Thread auch einen weiter unten steuern kann. > > > > MfG André H. > > > > > > > > > > Hallo, > > > ich möchte gern wissen ob man meinen Code kürzer schreiben kann. > > > Dieser wäre der untenstehende Code und zwar 5 mal hintereinander geschrieben, > > > nur dass menu.Ladepumpe_tog durch eine andere Variablen ersetzt wird und dass > > > der thread ladepumpe.Pumpe durch andere threads gestartet und gehalten wird. > > > > > > <code> > > > thread auto > > > { > > > > > > byte x[5]; > > > > > > > > > loop > > > { > > > if menu.Ladepumpe_tog != 0 > > > { > > > x[2] = 1 ; > > > if menu.Ladepumpe_tog == 1 > > > { > > > if stports.get(10) == 0 > > > { > > > halt ladepumpe.Pumpe; > > > > > > stports.set(10,-1) ; > > > } > > > > > > } > > > else > > > { > > > if stports.get(10) != 0 > > > { > > > halt ladepumpe.Pumpe; > > > stports.set(10,0); > > > } > > > > > > } > > > } > > > else > > > { > > > if x[2] == 1 > > > { > > > run ladepumpe.Pumpe; > > > sleep 1000; > > > } > > > x[2] = 0; > > > } > > > sleep 1000; > > > } > > > > > > } > > > </code> > > > > > > Ich habe es vesucht so zu lösen wie in diesem Beispiel, aber es hat nicht funktioniert: > > > > > > <code> > > > function update(var myvar, thread mythread) > > > { > > > ... > > > } > > > > > > function auto() > > > { > > > function update(var1, thread1); > > > function update(var2, thread2); > > > function update(var3, thread3); > > > }</code> > > > > > > MfG > > > Lorenz