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 | ||
| ||
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: |