Bonsoir,
Dans une boucle, je crée plusieurs Threads pointant sur une même fonction. Or une des variable de cette fonction est écrasée lors du 2eme appel de cette fonction. Je me retrouve avec 2 fois le même résultat au lieu de 2 différents.
J'ai mis en place une section critique comme je l'ai lu à plusieurs endroits, mais rien n'y fait.
Y aurait-il quelque chose que je n'aurais pas compris ?
Voila mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 long C_TrtExec::Executer(void) { long i; struct S_ThreadParam sO_ThreadParam; HANDLE lO_ThreadId; for (i=0 ; i<cI_NbTrt ; i++) { sO_ThreadParam.sO_TrtExec = this; sO_ThreadParam.sO_Trt = cO_ListeTrt[i]; // *** Info envoyée au thread qui est différente ici à chaque appel mais qui ne l'est plus dans le thread lO_ThreadId = CreateThread(NULL, 0, ThreadLauncher, &sO_ThreadParam, 0, NULL); AddThread(lO_ThreadId)// Ajoute simplement le ThreadId dans une liste pour le WaitForMultipleObjects } WaitForMultipleObjects( cI_NbThread, cO_ListeThread, TRUE, INFINITE); DelAllThread(); return 0; }Merci de voter aide...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 DWORD WINAPI ThreadLauncher(void *pO_ThreadParam) { EnterCriticalSection(&cO_CriticalSection); // cO_CriticalSection déclaré global struct S_ThreadParam *lO_ThreadParam = reinterpret_cast<struct S_ThreadParam *>(pO_ThreadParam); C_TrtExec *lO_TrtExec = lO_ThreadParam->sO_TrtExec; lO_TrtExec->TrtThread(lO_ThreadParam->sO_Trt); // Au deuxième appel, sO_Trt vaut la meme chose qu'au premier appel LeaveCriticalSection(&cO_CriticalSection); return 0; }
Partager