Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

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 Georg, > > Zuerst Sorry für die späte Antwort. > > > Und trotzdem bringt mich Deine Aussage zum &#8222;quit -1&#8220; zum > > Nachdenken: > > ... > > ... > > Ein entsprechender Hinweis, dass bei mehreren Threads eben die strenge > > Ablaufreihenfolge im Code durcheinander kommt, wäre > > vielleicht noch eine gute Ergänzung in Deinem so guten Buch > > zur C-Control II. Auch im Conrad-Manual wird nicht explizit > > darauf hingewiesen. So ein &#8222;Negativ-Beispiel&#8220; wie mein Test-Programm > > lässt einem die Sache dann besser verstehen. > > Das ist ja gerade das, was Multithreading ausmacht. > Die Threads laufen unabhängig voneinander. > Ansonsten wäre es kein Multithreading. :-) > > > Wie kann ich das Betriebssystem "disziplinieren" einen > > Thread vollständig durchlaufen zu lassen, natürlich auf Kosten > > anderer ? Muss ich dass mit der Synchronisation mit z.B. &#8222;wait free&#8220; > > machen, wie im Conrad-Manual aufgeführt? > > Nein. Du hast eben das gesamte Programm und nicht nur den einen Thread mit > quit angehalten. > > Stell' Dir einmal folgendes vor: > > Du hast 3 Räder - nennen wie Sie "main", "a" und "b". > Das Rad "main" fangt beim "Programmstart" von selbst an zu drehen. > Dieses Rad löst bei bestimmten Positionen (z.B. 5° von der Startposition entfernt) das Drehen von Rad "a" > und anschließend von Rad "b" aus. > Das wäre dann sozusagen folgendes: > <code>thread main > {//Startposition > ... > run a; // Das wären die "5°" > run b; > ... > }</code> > > Mit halt kannst Du nun bestimmte Räder anhalten. > (Bei der Impliziten Form den thread, in dem "halt;" steht, bei der > expliziten Form den angegebenen Thread, egal, wo dieser steht.) > Mit quit hälst Du alle Räder sofort an, egal wo sie gerade stehen. > > > Wie kann ich das Programmverhalten bei zeitlich kritischen Dingen > > voraussehen? > > Das geht theoretisch nur, wenn Du die VM-Codes mit zählst, weißt > wie lange eine VM-Instruktion dauert usw. > Wenn jedoch auf "externe" Ereignisse gewartet werden muß, > z.B. reicht hier schon ein wait hwcom.ready(), ist dies unmöglich. > Eigentlich geht das nur bei sehr einfachen Programmen, möglichst > ohne sleep und wait. (Was aber eigentlich nicht möglich ist.) > > Allerdings sollte dies unwichtig sein, da ein Multithreading-Programm > immer so aufgebaut sein sollte, daß sich die Threads nicht gegenseitig > blockieren, wenn dies nicht beabsichtigt ist. > Ein beabsichtigtes Blockieren wäre z.B. ein Capture, das jedoch > in erster Linie dazu dient Resourcen (Hard-und/oder Software) vor > "gleichzeitigem Zugriff zu schützen". > In zweiter Linie dient ein Capture auch dazu Threads zu Syncronisieren. > Beides hat aber miteinander sehr viel gemeinsam, so daß man > bei Captures generell von Syncronisieren von Thread sprechen kann. > > > In Deinem Buch zur C-Controll II gehst Du nur kurz darauf ein. > > Zuerst: Es ist nicht "mein Buch", sondern ich habe einen Teil dazu beigesteuert. :-) > Den Löwenanteil hat B.Kainka geschrieben. > U.a. auch den Teil mit dem Multithreading. > Ich will schließlich nicht alle Lorbeeren für das Buch ernten, wenn B.Kainka > auch einige(über die Hälfte) zustehen. :-) > > > Ich kann die Anzahl der ununterbrochenen virtuellen Befehle durch > > die Prio verändern, das habe ich aus dem Buch gelernt. > > Das stimmt. Auch nehmen aber sleep und wait darauf Einfluß, > da ein sleep immer die Rechenzeit an den nächsten Thread abgibt und wait, > wenn die Bedingung False ist. (Und yield ist vergleichbar mit einem sleep 0. > Oder eben umgekehrt - wie man's eben sieht :-) ) > > > > Eine Antwort ist nicht dringend bzw. ich werde auch selber nachforschen > > um die Sache ganz zu verstehen. > > Das beste ist, am Anfang einfach ein wenig mit einfachen Programmen rumzuprobieren, > um zu testen, wie sich Programme bei verschiedenen Prios verhalten. > > Als Beispiel könnte man z.B. folgendes machen: > <code>long c1,c2,c3; > thread a > { > run 50; > loop > { > c1=c1+1; > } > } > > thread b > { > run 100; > loop > { > c2=c2+1; > } > } > > thread c > { > run 200; > loop > { > c3=c3+1; > } > } > > thread main > { > run a; > run b; > run c; > sleep 2000; > halt a; > halt b; > halt c; > hwcom.init(); > hwcom.setspeed(8); > hwcom.clr(); > hwcom.num(c1); > hwcom.ret(); > hwcom.num(c2); > hwcom.ret(); > hwcom.num(c3); > quit 1; > }</code> > > > MfG André H.
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB