Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Multithreading und allgemeine Programmierung Kategorie: Programmierung C (von Franz-Peter - 13.01.2012 13:02)
Als Antwort auf Re: Multithreading und allgemeine Programmierung von Fertelle - 13.01.2012 11:24
Ich nutze:
C-Control Pro Mega32, C-Control Pro Mega128, CC-Pro 128 Application Board, Pro-Bot128
> > 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


    Antwort schreiben


Antworten:

Re: Multithreading und allgemeine Programmierung (von PeterS - 13.01.2012 13:25)
    Re: Multithreading und allgemeine Programmierung (von Fertelle - 13.01.2012 16:19)
        Re: Multithreading und allgemeine Programmierung (von Franz-Peter - 13.01.2012 17:32)
            Re: Multithreading und allgemeine Programmierung (von Fertelle - 14.01.2012 11:20)
        Re: Multithreading und allgemeine Programmierung (von PeterS - 13.01.2012 17:19)
            Re: Multithreading und allgemeine Programmierung (von Fertelle - 14.01.2012 11:22)