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