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> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > > > > > P.S - ein kleiner Nachtrag: > > > > > > > es macht auch keinen Sinn, in Funktionen Übergabeparameter zu definieren, und die dann am Anfang > > > > > > > der Funktion direkt zu überschreiben. Globale Variable kannst Du in der Funktion direkt verwenden, > > > > > > > und Übergabeparameter werden beim Aufruf gesetzt. Natürlich kann man die in der Funktion auch > > > > > > > ändern, aber wenn man sie nicht als Übergabewerte braucht, sollte man sie auch nicht als Parameter, > > > > > > > sondern als lokale Variable definieren. > > > > > > > Gruß > > > > > > > Franz-Peter > > > > > > > > > > > > > > > > > > Vielen Dank erst mal! > > > > > > > > > > > > Hab den Code jetzt mal abgeändert und bekomme auch keine Fehler mehr! > > > > > > Hab am Montag ein Praktikum wo wir mit threads arbeiten und wollt fragen ob der Code im jetzt soweit > > > > > > in Ordnung ist (funktionsfähig) ist. > > > > > > Warum kann ich/sollte ich threads nicht solange andauern lassen (1s,2s)? > > > > > > Was ich mit den Übergabevariablen erreichen will ist folgendes: Ich übernehme die werte der globalen > > > > > > Variablen,wenn der thread wechselt werden diese nicht überschrieben und die globalen Variablen haben die selben > > > > > > Werte als am Anfang die ich für die zweite Funktion verwenden kann.Lieg ich richtig?Wie könnt ichs besser machen? > > > > > > > > > > > > Vielen Dank.Fertelle > > > > > > > > > > Hallo Fertelle, > > > > > natürlich kannst Du im Thread lokale Variablen verwenden, wenn du die globalen Variablen unangetastet > > > > > lassen willst (wobei die in deinem Programm ja gar nicht verändert werden - und allein der Thread- > > > > > Wechsel ändert sie auch nicht). Nur solltest Du sie dann auch als lokale Variable deklarieren und > > > > > nicht als Übergabeparameter. Übergabeparameter gibt es bei einem Thread nun mal nicht. > > > > > > > > > > Ein Thread ist im Prinzip nichts anderes wie eine 2. (oder 3., 4....) main() Routine, die quasi > > > > > parallel zur Haupt main() Routine ausgeführt wird. Wenn Du die Wechselzeiten sehr groß machst, dann > > > > > laufen sie eben nicht 'quasi-parallel' ab, sondern in grossen Zeitscheiben spürbar nacheinander, > > > > > was eigentlich nicht der Sinn einer Thread-Implementierung ist. Nur das Thread_Delay verändert > > > > > dieses Verhalten noch, denn es führt auch zu einem Thread-Wechsel. > > > > > > > > > > In der jetzigen Version beendet sich dein main() nach dem letzten Thread_Start (Das Thread_Delay > > > > > danach ist deshalb letzendlich wirkungslos). Ich bin mir nicht ganz sicher, ob die anderen Threads > > > > > weiterlaufen, wenn sich main() beendet, glaube aber schon. Es ist aber auf jeden Fall eine eher > > > > > ungewöhnliche Programmierung, die man normalerweise nicht so realisieren würde. > > > > > > > > > > N.B: da Du ja nur ein einzelnes Bit im Port setzen/Rücksetzen willst, muss Du auch beim Schreiben > > > > > die Bit-Variante der Lib verwenden (Port_WriteBit ). Mit Port_Write() änderst Du alle 8 Bits eines > > > > > Byte-Ports auf einmal. > > > > > Gruß > > > > > Franz-Peter > > > > > > > > Bei Beendigung (auch Thread_Kill) von Thread 0 (Hauptprogramm) wird die komplette > > > > Abarbeitung angehalten. > > > > > > > > Gruss Peter > > > > > > Danke, > > > so langsam wirds immer klarer! > > > hab den Code jetzt mal etwas vereinfacht und nochmals angehängt. > > > Wenn ich den Command Thread_Delay verwende spring ich aus meiner Funktion raus und bearbeite die nächste > > > Funktion, sehe ich das so richtig? > > > Da ich nur threads in meiner Main Funktion habe springe ich auch nur von einem thread zum anderen, da die > > > Main ja sonst eigentlich nichts zu tun hat? > > > Würde man so programmieren wie ichs jetzt gemacht habe oder zu einfach? > > > > > > Vielen, vielen Dank. > > > > > > Fertelle > > Hallo Fertelle, > > ja, ein Thread wird unterbrochen, wenn Thread_Delay (oder Thread_Wait) aufgerufen wird, oder wenn > > sein Laufzeit wie in #thread definiert abgelaufen ist. Dann sucht der Interpreter einen anderen > > Thread, der zur Abarbeitung bereit ist und macht dort weiter wo er diesen Thread vorher unterbrochen > > hat. Das ist auch bei der Zeit von Thread_Delay zu beachten: Im Gegensatz zu Abs_Delay ist das keine > > exakte Zeit, sondern nur eine Mindestzeit. Die tatsächliche Verzögerung kann u.U. wesentlich grösser > > sein. Wenn die Zeit abläuft wird ja normalerweise gerade ein anderer Thread bearbeitet, und erst > > wenn der unterbrochen wird (aufgrund der Ereignisse oben) kann der wartende Thread wieder aufgenommen > > werden. Insbesondere wenn Du die Zeitscheiben sehr groß machst kann das dementsprechend lange > > dauern. > > In diesem Sinne ist auch main() nur ein Thread wie alle anderen. Die Verwaltung der Threads findet > > nicht in main() statt. Wenn der Aufruf von Thread_Start() in main zurückkommt hat Main() mit der > > weiteren Abarbeitung nichts mehr zu tun. Dein main() hat also nach dem Start der Threads eigentlich > > garnichts mehr zu tun. Und das ist auch weiterhin das Problem: main() beendet sich, und damit endet > > die gesamte Programmbearbeitung. Du musst deiner main-Routine unbedingt etwas zu tun geben - und > > wenn es nur eine leere Dauerschleife ist. Das Thread_Delay zwischen den beiden Thread_Start macht > > dagegen eigentlich keinen Sinn - oder weshalb hast Du das da eingefügt? > > > > Gruß > > Franz-Peter > > Hi,ja jetzt wo du es mir sagst, dass thread delay zwischen thread 1 und 2 ist sinnlos, da ich die threads > ja direkt zum anderen springen und die Rangfolge in der main()belanglos ist. > Hab am Ende noch ne Endlosschleife angehängt, damit die main() abgearbeitet werden kann und das Programm > nicht beendet wird. > Werd das Programm am Montag mal so testen und mich bei aufkommenden Fragen wieder melden. > Vielen Dank für die umfangreiche Hilfe!!! > > Freundlichen Gruß, > > Fertelle