#include <ThreadGroup.hpp>
Dérivée par Millie::ClonableThreadGroup.
Graphe d'héritage de Millie::ThreadGroup:
Fonctions membres publiques | |
ThreadGroup () | |
ThreadGroup (const std::string &name) | |
bool | isRunning () |
permet de savoir si l'ensemble des threads du groupe est en cours d'exécution | |
bool | isStarted () |
permet de savoir si le groupe a été démarré | |
const std::string & | getName () const |
retourne le nombre du groupe | |
void | setName (const std::string &name) |
spécifie un nom au groupe | |
void | joinAll () |
permet d'attendre que tout le monde rejoigne le thread courant | |
unsigned int | getNbGThread () |
Retourne le nombre de thread du groupe. | |
GThread & | operator[] (unsigned int pos) |
Retourne une référence sur un thread. | |
int | getNbWaitingGThread () |
void | notifyAll () |
permet de réveiller tous les threads endormis sur wait | |
void | startAll () |
permet d'exécuter l'ensemble des threads en parallèle. | |
void | add (GThread *thread) |
permet d'ajouter un thread au groupe. | |
virtual | ~ThreadGroup () |
destructeur | |
Fonctions membres protégées | |
bool | threadWaitAll (GThread *t, pthread_mutex_t **mutex, pthread_cond_t **wait) |
Fonctions membres privées | |
void | init () |
int | getNbWaitingThread () |
Attributs privés | |
bool | _isRunning |
bool | _isStarted |
std::string | _name |
std::vector< GThread * > | _vectThread |
std::vector< bool > | _vectWaiting |
pthread_mutex_t | _mutexWaitAll |
pthread_cond_t | _waitSynchro |
unsigned int | _nbwaitingthread |
Mutex | _synchronizedWaitingThread |
Mutex | _synchronizedIsRunning |
Mutex | _synchronizedRun |
Mutex | _synchronizedIsStarted |
Mutex | _synchronizedNbThread |
Mutex | _synchronizedWaitAllNotify |
Amis | |
class | GThread |
Il est possible d'utiliser des ThreadGroup de manière sécurisé, notamment au niveau de l'envoi des exceptions. On peut utiliser ce groupe, par exemple sous la forme :
class MonThread : public GThread { public: void run() { for(int j=0; j<20; j++) { for(int i = 0; i<10; i++) std::cerr<<"Thread : "<<i; waitAllGroup(); } } }; ... ThreadGroup group; group.add(new MonThread()); group.add(new MonThread()); group.startAll(); ... on peut lancer des exceptions, l'appel à joinAll se fera automatiquement
Définition à la ligne 81 du fichier ThreadGroup.hpp.
ThreadGroup::ThreadGroup | ( | ) |
ThreadGroup::ThreadGroup | ( | const std::string & | name | ) |
Permet de créer le groupe en spécifiant le nom
Définition à la ligne 58 du fichier ThreadGroup.cpp.
ThreadGroup::~ThreadGroup | ( | ) | [virtual] |
destructeur
Cette méthode attend que chaque thread ait rejoint le groupe
On attend que tout le monde rejoigne
On est certain à la sortie que _isRunning est false
on supprime chaque thread
Définition à la ligne 285 du fichier ThreadGroup.cpp.
Références _mutexWaitAll, _vectThread, _vectWaiting, _waitSynchro, et joinAll().
void ThreadGroup::init | ( | ) | [private] |
Définition à la ligne 42 du fichier ThreadGroup.cpp.
Références _isRunning, _isStarted, _mutexWaitAll, _nbwaitingthread, et _waitSynchro.
Référencé par ThreadGroup().
int Millie::ThreadGroup::getNbWaitingThread | ( | ) | [private] |
bool ThreadGroup::threadWaitAll | ( | GThread * | t, | |
pthread_mutex_t ** | mutex, | |||
pthread_cond_t ** | wait | |||
) | [protected] |
Définition à la ligne 117 du fichier ThreadGroup.cpp.
Références _mutexWaitAll, _nbwaitingthread, _synchronizedNbThread, _synchronizedWaitingThread, _vectThread, _vectWaiting, _waitSynchro, et isStarted().
Référencé par Millie::GThread::waitAllGroup().
bool ThreadGroup::isRunning | ( | ) |
permet de savoir si l'ensemble des threads du groupe est en cours d'exécution
Définition à la ligne 70 du fichier ThreadGroup.cpp.
Références _isRunning, et _synchronizedIsRunning.
Référencé par startAll().
bool ThreadGroup::isStarted | ( | ) |
permet de savoir si le groupe a été démarré
Définition à la ligne 64 du fichier ThreadGroup.cpp.
Références _isStarted, et _synchronizedIsStarted.
Référencé par joinAll(), notifyAll(), et threadWaitAll().
const std::string & ThreadGroup::getName | ( | ) | const |
retourne le nombre du groupe
on ne peut changer le nom qu'à l'instanciation. Pas de mutex
Définition à la ligne 76 du fichier ThreadGroup.cpp.
Références _name.
void Millie::ThreadGroup::setName | ( | const std::string & | name | ) |
spécifie un nom au groupe
void ThreadGroup::joinAll | ( | ) |
permet d'attendre que tout le monde rejoigne le thread courant
Il n'est pas obligatoire d'appeler cette méthode, elle sera automatiquement appelée par le destructeur
si ca n'a tourne, on rejoint tout le monde On peut appeler isStarted car une fois _isStarted passé à true il ne revient jamais à false
on indique que tout le monde a été rejoint et on arrête
sinon, on ne fait rien de spécial
Définition à la ligne 83 du fichier ThreadGroup.cpp.
Références _isRunning, _synchronizedIsRunning, _vectThread, et isStarted().
Référencé par Millie::ClonableThreadGroup::~ClonableThreadGroup(), et ~ThreadGroup().
unsigned int ThreadGroup::getNbGThread | ( | ) |
Retourne le nombre de thread du groupe.
A noter que dès que le thread est démarré via startAll, le nombre nde varie plus
Définition à la ligne 104 du fichier ThreadGroup.cpp.
Références _synchronizedNbThread, et _vectThread.
GThread & ThreadGroup::operator[] | ( | unsigned int | pos | ) |
Retourne une référence sur un thread.
pos | le numéro du thread que l'on souhaite |
OutOfRange | si pos<0 ou pos>= getNbGThread() |
Définition à la ligne 313 du fichier ThreadGroup.cpp.
Références _synchronizedNbThread, et _vectThread.
int ThreadGroup::getNbWaitingGThread | ( | ) |
Définition à la ligne 111 du fichier ThreadGroup.cpp.
Références _nbwaitingthread, et _synchronizedWaitingThread.
void ThreadGroup::notifyAll | ( | ) |
permet de réveiller tous les threads endormis sur wait
IllegalThreadStateException | si le groupe n'a jamais été lancé |
Réveille tout le monde
Définition à la ligne 216 du fichier ThreadGroup.cpp.
Références _nbwaitingthread, _vectThread, _vectWaiting, et isStarted().
void ThreadGroup::startAll | ( | ) |
permet d'exécuter l'ensemble des threads en parallèle.
ThreadCreationFailed | si la création d'un thread a échoué |
Définition à la ligne 232 du fichier ThreadGroup.cpp.
Références _isRunning, _isStarted, _synchronizedIsRunning, _synchronizedIsStarted, _synchronizedNbThread, _vectThread, et isRunning().
Référencé par main().
void ThreadGroup::add | ( | GThread * | thread | ) |
permet d'ajouter un thread au groupe.
Ce thread doit avoir été alloué avec new et NE DEVRA PAS être détruit via delete. C'est le groupe qui se chargera de le détruire automatiquement.
Cela permet de sécuriser le groupe et les threads en cas d'envoi d'exception.
IllegalArgument | si le thread a déjà été ajouté | |
IllegalThreadStateException | si le groupe a déjà été lancé |
Si c'est déjà démarré, c'est pas bon
Le thread est alloué par new et c'est à nous de se charger de la libération
On ajoute sur la liste
Définition à la ligne 248 du fichier ThreadGroup.cpp.
Références _isStarted, _synchronizedIsStarted, _synchronizedNbThread, _vectThread, _vectWaiting, et Millie::GThread::setGroup().
Référencé par Millie::ClonableThreadGroup::add(), et main().
friend class GThread [friend] |
Définition à la ligne 212 du fichier ThreadGroup.hpp.
bool Millie::ThreadGroup::_isRunning [private] |
Définition à la ligne 85 du fichier ThreadGroup.hpp.
Référencé par init(), isRunning(), joinAll(), et startAll().
bool Millie::ThreadGroup::_isStarted [private] |
Définition à la ligne 86 du fichier ThreadGroup.hpp.
Référencé par add(), init(), isStarted(), et startAll().
std::string Millie::ThreadGroup::_name [private] |
std::vector<GThread*> Millie::ThreadGroup::_vectThread [private] |
Définition à la ligne 89 du fichier ThreadGroup.hpp.
Référencé par add(), getNbGThread(), joinAll(), notifyAll(), operator[](), startAll(), threadWaitAll(), Millie::ClonableThreadGroup::~ClonableThreadGroup(), et ~ThreadGroup().
std::vector<bool> Millie::ThreadGroup::_vectWaiting [private] |
Définition à la ligne 90 du fichier ThreadGroup.hpp.
Référencé par add(), notifyAll(), threadWaitAll(), et ~ThreadGroup().
pthread_mutex_t Millie::ThreadGroup::_mutexWaitAll [private] |
Définition à la ligne 92 du fichier ThreadGroup.hpp.
Référencé par init(), threadWaitAll(), et ~ThreadGroup().
pthread_cond_t Millie::ThreadGroup::_waitSynchro [private] |
Définition à la ligne 93 du fichier ThreadGroup.hpp.
Référencé par init(), threadWaitAll(), et ~ThreadGroup().
unsigned int Millie::ThreadGroup::_nbwaitingthread [private] |
Définition à la ligne 95 du fichier ThreadGroup.hpp.
Référencé par getNbWaitingGThread(), init(), notifyAll(), et threadWaitAll().
Définition à la ligne 97 du fichier ThreadGroup.hpp.
Référencé par getNbWaitingGThread(), et threadWaitAll().
Définition à la ligne 98 du fichier ThreadGroup.hpp.
Référencé par isRunning(), joinAll(), et startAll().
Mutex Millie::ThreadGroup::_synchronizedRun [private] |
Définition à la ligne 99 du fichier ThreadGroup.hpp.
Définition à la ligne 100 du fichier ThreadGroup.hpp.
Référencé par add(), isStarted(), et startAll().
Définition à la ligne 101 du fichier ThreadGroup.hpp.
Référencé par add(), getNbGThread(), operator[](), startAll(), threadWaitAll(), et Millie::ClonableThreadGroup::~ClonableThreadGroup().
Définition à la ligne 102 du fichier ThreadGroup.hpp.