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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren