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 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