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 Fertelle - 14.01.2012 11:22)
Als Antwort auf Re: Multithreading und allgemeine Programmierung von PeterS - 13.01.2012 17:19
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
> > > > > > 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
>
> Hänge bitte als letzte Zeile der main() Funktion ein "while(1);" an. Sonst wird ja die main()
> Funktion und das gesamte Programm direkt beendet.
>
> Gruss Peter

Vielen Dank, wurde gemacht.
Teste das Programm am Montag mal und meld mich dann obs funktioniert hat oder nicht!
Schönes Wochenende.

GruÃ? Fertelle


    Antwort schreiben


Antworten: