Anfängerprobleme mitThreads

Gast #833363
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.
Gast #833370
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.
Gast #833380
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.