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

Re: globale Variable in mehreren Threads Kategorie: Programmierung (von Heiko - 12.11.2008 8:23)
Als Antwort auf globale Variable in mehreren Threads von Micha Beck - 11.11.2008 21:45
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo Micha,

was meinst Du mit der Aussage im Code 'main läuft erst weiter, wenn ablauf beendet' ?
Soll dies Dein Code so machen oder läuft Dein Programm tatsächlich erst weiter, wenn
'ablauf' beendet ist?
Letzteres kann ich mir eigentlich nicht vorstellen. Ich gehe eher davon aus, daĂ? Dein Mainthread
erst nachdem 'ablauf' durch ist, weiter laufen soll.
Wenn dem so ist, mĂĽĂ?test Du 'ablauf' als Funktion deklarieren und nicht als thread.
Wenn Du aus 'main' heraus 'ablauf' als thread per run startest, laufen beide quasi parallel ab.
Da Du 'ablauf' selbst nach dem Durchlauf auch nicht stopst, beginnt dieser nach dem Ende wieder
von vorn (Threads werden in einer Endlosschleife abgearbeitet).
Soll er nur einmal durchlaufen werden, muĂ? er per 'halt' am Ende angehalten werden.

Durch deine jetzige Endlosschleife in 'ablauf' kannst Du aus Deinem Mainthread natĂĽrlich nicht mehr genau
sagen, an welcher Stelle die For-Schleife in 'ablauf' gerade ist, wenn Du sie von Main heraus abfragst.
Je nachdem, wie zufällig synchron beide Threads zueinander ablaufen, kann es vorkommen, da� Du
gerade den Punkt triffst, wo die For-Schleife mit 1 wieder beginnt.

Beachte, auch der Mainthread läuft in einer Endlosschleife, solange er nicht mit 'Halt' angehalten wird.
Dein Loop kannst Du daher ev. sparen, wenn es den gesamten Threadcode einschliest.
Sollten vor dem loop jedoch noch einmalige Anweisungen oder Initialisierungen stehen, ist der loop richtig.

Wie gesagt, auf den ersten Blick macht es meiner Meinung nach mehr Sinn, 'ablauf' als Funktion
zu deklarieren bzw. je nachdem, ob sie von mehreren Stellen aus angesprochen werden soll oder nur einmal,
die Zeilen Code direkt mit in den Mainthread zu packen.
Wenn es aus irgendwelchen GrĂĽnden doch notwendig ist, einen eigenen Thread laufen zu lassen, mĂĽĂ?te
man ev. capturen.

GruĂ? Heiko

> Guten Tag,
>
> ich bin zur Zeit drann, ein recht umfangreiches Programm für ein automatisches Kabelprüfgerät für
> bis zu 65 Adern zu schreiben. Hier in diesem Forum habe ich schon einige Tipps gelesen. Danke
> schonmal hierfĂĽr. Nun aber zu mein Problem, andem ich fast verzweifle.
>
> Hier ein Beispielcode. Ich deklarieren in der main Thread eine Wert in einer globalen Variablen.
> Diesen möchte ich später im nun gestartetem Thread ablauf aufrufen.
>
>
>
> int wert;
>
>
> thread ablauf
> {
>  int i
>  .......
>  for i=1...wert
>   {.......};
>  .......
> }
>
>
> thread main
> {
>  loop
>  {
>   .......
>   wert = (Wert je nach Schalterstellung von 1...4) ;
>   .......  
>   run ablauf;
>   (main läuft erst weiter, wenn ablauf beendet)
>   .......
>   };
> }
>

>
> Aber irgentwie kann ich keine Zahl unter Wert definieren. wert hat immer die Zahl 1, egal was ich
> unter wert = ? eingebe. Muss ich hier capture einsetzen und wann ja wie?
>
> Ich hoffe ihr könnt mich ein Stück weiterbringen.
>
> Mit freundlichen GrĂĽĂ?en
> Micha


    Antwort schreiben


Antworten: