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.
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.
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......
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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.