mikrocontroller.net

Forum: PC-Programmierung Anfängerprobleme mitThreads


Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Muss ich bei der Funktion CreatThreade Handle noch irgend etwas 
zusätzliches bechten?

Habe eine Klasse cCol.

und Struktur für ThreadData:

  {

   cCol *pCol;   //Klasse
   int rz;
   int lz;
 }

im Main werden zwei Threads erzeugt:

ThreadData *threadData=new ThreadData; //für die Parameter des Threads
threadData->rz=0;
threadData->lz=1;
HANDLE Thread1=CreateThread(0,0,ThreadFunc,(LPVOID) 
threadData,0,&ThreadID1);
threadData->rz=1;
threadData->lz=2;
HANDLE Thread2=CreateThread(0,0,ThreadFunc,(LPVOID) 
threadData,0,&ThreadID2);

Mein Problem: Beim Debuggen springt er mir zwar in die ThreadFunc aber 
die Variablen rz und lz sind beim 1 und 2 Threads die selben?

d.h:
Thread1:
rz=1;   müsste 0 sein
lz=2;   müsste 1 sein
Thread2:
rz=1;
lz=2;


Habe leider noch nicht soviel Erfahrung mit Threads.

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
das problem ist da du die gleiche variable/stuktur an beide thread 
übergibtst.

ThreadData1 *threadData=new ThreadData; //für die Parameter des Threads
threadData1->rz=0;
threadData1->lz=1;
HANDLE 
Thread1=CreateThread(0,0,ThreadFunc,(LPVOID)threadData1,0,&ThreadID1);

ThreadData2 *threadData=new ThreadData; //für die Parameter des Threads
threadData2->rz=1;
threadData2->lz=2;
HANDLE 
Thread2=CreateThread(0,0,ThreadFunc,(LPVOID)threadData2,0,&ThreadID2);

sollte gehen.

Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er soll aber auf die gleiche Klasse zugreifen und es sollen nur die 
Parameter rz und lz verändert werden. Ich dachte da jeder Thread seinen 
eigenen Stack hat......

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja jeder thread hat seinen eignen stack, aber dafür muss du ja erstmal 
eine variable auf den stack anlegen, selbst wenn du in der  ThreadFunc 
eine Kopie von threadData machst, kenn es passieren das die beiden 
thread in andere reihenfolge gestartet werden.
Die ThreadFunc wird nicht beim CreateThread aufgerufen, es wird nur der 
thread ereugt, wann er daran ist entscheidet der sheduler. Kann also 
auch passieren das zuerst der 2. und dann der 1. gestartet wird.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, sicher hat jeder Thread seinen eigenen Stack. Du aber übergibst 
beiden Threads denselben Pointer auf ein auf dem Heap (und keinem Stack) 
liegendes Objekt.

Autor: Kurt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK! Danke für die schnelle Antwort!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.