Threads et leurs paramètres

Résolu
Chop_chop Messages postés 10 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 7 mai 2007 - 30 mars 2007 à 16:20
Chop_chop Messages postés 10 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 7 mai 2007 - 2 avril 2007 à 09:33
Bonjour, j'ai un problème quant à un programme avec création de threads que je réalise.
Je vous explique ce que je code et qui ne fonctionne pas :

J'ai ma fonction principale, dans laquelle je créé plusieurs threads de la facon suivante :

for(i=0;i<nbvoiesPID;i++)            {            hThread [i] = CreateThread(NULL,NULL,Thread_SBA,(void *) &voiePID[i], NULL, &ThreadId);            printf(" ID du thread %i : %i\n",i,ThreadId);            }

"voiePID" correspond à une structure que j'ai déclaré afin de passer plusieurs paramètres.
Bon, le lancements des threads fonctionne bien.

Ma fonction principale continue a s'executer (les threads egalement car bouclés en while(1){...}) et j'appelle , à la suite dans cette fonction principale une autre fonction dans laquelle je fais passer en argument ma meme structure  voiePID[i] :

 fonction2(...,voiePID);
Ma fonction2,dans son fonctionnement , modifie une variable globale , qui par sa modification, provoque un changement d'une valeur int de la structure voiePID[] dans l'un des threads.(j'imagine que j'en ai perdu la moitier avec cette phrase...)

Ma fonction2 accede alors à la valeur int de la structure voiePID[] qui a été modifié dans le thread mais aucun changement n'est constaté pour cette valeur dans fonction2 ???

comment faire pour que la modif dans un thread soit notifiée dans la fonction2 ? Merci
      

4 réponses

mezaya Messages postés 202 Date d'inscription dimanche 18 mai 2003 Statut Membre Dernière intervention 6 mars 2010
31 mars 2007 à 13:27
ta variable est peut être en cache donc le thread donc ta valeur ne sera pas mise a jour. Pour faire du multi-threading il faut utiliser un minimum de proctection. regarde les fonctions "interlocked", "critical section" et "mutex".

va faire un tour par la : http://msdn2.microsoft.com/en-us/library/ms684122.aspx


Voili,Voilou [;)]
3
24Karas Messages postés 233 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 5 juillet 2008
30 mars 2007 à 17:20
Es-tu sûr que quand ta fonction 2 accède à la variable, le thread a eu le temps de modifier la valeur ? pt'etre un probleme de synchro quoi ...

++
0
Chop_chop Messages postés 10 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 7 mai 2007
30 mars 2007 à 17:44
oui, la fonction 2 y accède, parceque je voie les valeurs de toutes les variables de la structure (j'ai fait un printf de ces valeurs dans la fonction 2 pour en etre sur).

Pour la synchro, c'est ce que je me disais, mais meme en laissant tourné le programme, la valeur de la variable modifiée de la stucture dans fonction 2 ne s'actualise pas
0
Chop_chop Messages postés 10 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 7 mai 2007
2 avril 2007 à 09:33
Merci à tous les 2, je ne connaissais pas la notion de "interlocked" , ca a l'aire pas mal, je vais essayer de voir ce que je peux faire avec !
Merci, je vous tiens au courant !!!
0
Rejoignez-nous