C Control PRO-BOT128 + C-Control PRO 128 Unit + Voltcraft® USB programming cable Kit 190406 User Manual

Product codes
190406
Page of 244
193
C-Control Pro Mega Series
© 2008 Conrad Electronic
Instruktionen der aktuelle Thread auf den Status "inaktiv" gesetzt  und der nächste ausführbare
Thread wird gesucht. Danach startet die Abarbeitung des neuen Threads. Der neue Thread kann
wieder derselbe wie vorher sein, je nachdem wie viele Threads aktiviert wurden oder für eine
Ausführung bereit sind. Das Hauptprogramm gilt als erster Thread. Daher ist Thread "
0
" immer aktiv,
auch wenn explizit keine Threads gestartet worden sind.
Die Priorität eines Threads kann beeinflußt werden, in dem man ändert, wie viele Bytecodes ein
Thread bis zum nächsten Threadwechsel ausführen darf (siehe 
Anzahl der Zyklen bis zum Wechsel, desto geringer die Priorität des Threads. Die Ausführungszeit
eines Bytecodes ist im Mittel 7-9 µsec. Bei einzelnen Bytecode Befehlen dauert es jedoch länger, z.
B. Floatingpoint Operationen. 
 Auch interne Interpreterfunktionen gelten als ein Zyklus. Da z.B. 
Zeichen von der seriellen Schnittstelle ankommt, kann in Ausnahmefällen ein Zyklus sehr lange
dauern.
Ein Thread bekommt für seine lokalen Variablen soviel Platz wie ihm in den 
Projekts zugewiesen wird. Eine Ausnahme ist Thread "
0
" (das Hauptprogramm). Dieser Thread
erhält den restlichen Speicherplatz, den die anderen Threads übrig lassen. Man sollte daher vorher
planen, wie viel Speicherplatz jeder zusätzliche Thread wirklich benötigt.
 Damit zusätzliche Threads gestartet werden können muß "Multithreadingin den 
eingeschaltet werden, und die Parameter für die weiteren Threads in den 
 benutzen. Wird trotzdem z.
B. ein AbsDelay(1000) benutzt, so tritt folgender Effekt auf: Da der Thread erst nach 5000 Zyklen
(Default Wert) zum nächsten Thread wechselt, würde der Thread 5000 * 1000ms (5000 Sek.) laufen,
bis der nächste Thread anfangen könnte zu arbeiten.
Thread Synchronisation
Manchmal ist es nötig, daß ein Thread auf den anderen wartet. Dies kann z.B., eine gemeinsame
Hardwareresource sein, die nur ein Thread bearbeiten kann. Oder manchmal definiert man kritische
Programmbereiche, die nur ein Thread betreten darf. Diese Funktionen werden durch die
Anweisungen 
Ein Thread, der warten soll, führt die Anweisung Thread_Wait mit einer Signal Nummer aus. Der
Zustand des Threads wird auf wartend gesetzt. Dies bedeutet, daß dieser Thread bei einem
möglichen Threadwechsel übergangen wird. Hat der andere Thread seine kritische Arbeit beendet,
gibt er den Befehl Thread_Signal mit der gleichen Signalnummer, die der andere Thread für
Thread_Wait benutzt hat. Der Threadzustand des wartenden Threads wechselt dann von wartend zu
inaktiv. Jetzt wird er bei einem möglichen Threadwechsel wieder berücksichtigt.
Deadlocks
Begeben sich alle aktiven Threads in einen Wartezustand mit 
, so gibt es keinen Thread
mehr, der die anderen Threads aus dem wartenden Zustand befreien könnte. Diese Konstellationen
sind bei der Programmierung zu vermeiden.