Thread

PriMe2302 Messages postés 39 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 19 août 2012 - 15 janv. 2012 à 13:50
PriMe2302 Messages postés 39 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 19 août 2012 - 15 janv. 2012 à 21:08
Bonjour,

J'ai un tableau d'éléments et une fonction que je dois appliquer à chaque élément.
J'ai créé des Threads (disons 5) pour pouvoir traiter plusieurs éléments en même temps.
Je traite 5 éléments à la fois, un fois que le traitement des 5 éléments est terminé, j'en relance 5 jusqu'à ce que tous les éléments du tableau aient été traités.

Je voudrais savoir comment faire pour que lorsqu'un des 5 Thread a terminé il passe au prochain élément non-traité du tableau.

Merci

3 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 1
15 janv. 2012 à 19:09
salut,


Deux booléens devraient suffire. Un pour bloquer/debloquer l'element (lock) et l'autre pour savoir si le calcul est effectué ou non.

@++
0
PriMe2302 Messages postés 39 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 19 août 2012
15 janv. 2012 à 20:45
Je n'ai pas bien compris comment faire.
Voici le code que j'ai fait.

array <Thread^>^ threads = gcnew array<Thread^>(nbThreads);
for (i = 0; i < listView1->Items->Count; i++) {
realI = i % nbThreads;
if (i >= nbThreads)
threads[realI]->Join();
threads[realI] = gcnew Thread(gcnew ParameterizedThreadStart(this, &Form::Function));
threads[realI]->Start(listView1->Items[i]);
}
realI = (i < nbThreads) ? i : nbThreads;
for (i = 0; i < realI; i++)
threads[i]->Join();
delete[] threads;
0
PriMe2302 Messages postés 39 Date d'inscription mardi 26 août 2008 Statut Membre Dernière intervention 19 août 2012
15 janv. 2012 à 21:08
En fait, je souhaite remplacer le "if (i >= nbThreads) threads[realI]->Join();" par l'attente de n'importe lequel des nbThreads en cours

Merci
0