#include <Thread.hpp>
Dérivée par Millie::ClonableThread, et Millie::GThread.
Graphe d'héritage de Millie::Thread:
Fonctions membres publiques | |
Thread () | |
Constructeur (ne lance pas le thread). | |
Thread (const std::string &name) | |
Constructeur. | |
bool | isRunning () |
Indique si le thread est en train de tourner. | |
void | wait () |
Permet d'attendre à ce que quelqu'un appelle notify. | |
bool | isAlive () |
bool | isStarted () |
permet de savoir si le thread a été démarré ou non | |
void | start () |
démarre l'exécution du thread en parallèle au thread courant | |
void | join () |
permet, dans le thread courant, d'attendre la fin d'exécution du thread | |
void | notify () |
permet de réveiller un thread endormi avec wait | |
const std::string & | getName () const |
permet d'obtenir le nom du thread | |
virtual void | run () |
ThreadID | getThreadId () const |
retourne l'identifiant du thread | |
virtual | ~Thread () |
Fonctions membres publiques statiques | |
static ThreadID | currentThread () |
retourne l'identifiant du thread courant | |
Attributs protégés | |
Mutex | _synchronizedIsRunning |
bool | _isRunning |
Fonctions membres privées | |
void | init () |
Attributs privés | |
std::string | _name |
bool | _isAlive |
bool | _isStarted |
bool | _wasJoined |
Mutex | _synchronized |
pthread_mutex_t | _waitMutex |
Mutex | _synchronizedWait |
Mutex | _synchronizedRun |
Mutex | _synchronizedIsAlive |
Mutex | _synchronizedStart |
Mutex | _synchronizedWasJoined |
pthread_cond_t | _waitSynchro |
pthread_t | _thread |
pthread_mutex_t | _mutexWaitAll |
Amis | |
void * | threadHandler (void *pthread) |
Les classes filles devront redéfinir la méthode run pour indiquer spécifier le traitement du thread. Il est fortement conseillé de définir le destructeur en lui faisant appeler la méthode join. Cela permet de sécuriser l'envoi d'exception
Il est donc possible de lancer plusieurs threads qui tourneront en parallèle sur la machine.
La méthode classique en utilisant cette classe pour créer un thread consiste donc à déclarer un nouveau thread sous cette forme :
puis de l'instancier et le lancer aussi :
Il est possible, dans le cas où l'on a défini le destructeur en utilisant join de ne pas appeler join à la main dans le code.
join ne peut pas être défini dans le destructeur de la classe Thread, car il est possible qu'il y ait des incohérence. En effet, la sous classe MonThread sera déjà détruite lorsque l'on arrivera au destructeur du Thread. Et comme le thread est exécuté en parallèle, il y a des possibilité d'avoir de grosse incohérence.
La conception du thread là est inspiré de la conception des Thread Java.
Définition à la ligne 108 du fichier Thread.hpp.
Thread::Thread | ( | ) |
Constructeur (ne lance pas le thread).
Définition à la ligne 78 du fichier Thread.cpp.
Références init().
Thread::Thread | ( | const std::string & | name | ) |
Thread::~Thread | ( | ) | [virtual] |
Destructeur
IllegalThreadStateException | si le thread n'a jamais été rejoint. Cela indique une erreur de programmation |
Définition à la ligne 89 du fichier Thread.cpp.
Références _isAlive, _isStarted, _mutexWaitAll, _synchronizedStart, _waitMutex, _waitSynchro, et _wasJoined.
void Thread::init | ( | ) | [private] |
Définition à la ligne 65 du fichier Thread.cpp.
Références _isAlive, _isStarted, _mutexWaitAll, _waitMutex, _waitSynchro, et _wasJoined.
Référencé par Thread().
bool Thread::isRunning | ( | ) |
Indique si le thread est en train de tourner.
A noter que cette méthode retournera vrai entre l'appel à start et l'appel à join (ou au destructeur)
Définition à la ligne 114 du fichier Thread.cpp.
Références _isRunning, et _synchronizedIsRunning.
void Thread::wait | ( | ) |
Permet d'attendre à ce que quelqu'un appelle notify.
IllegalThreadStateException | si le thread n'est pas en cours d'exécution |
Définition à la ligne 122 du fichier Thread.cpp.
Références _isRunning, _synchronizedIsRunning, _waitMutex, et _waitSynchro.
bool Thread::isAlive | ( | ) |
bool Millie::Thread::isStarted | ( | ) |
permet de savoir si le thread a été démarré ou non
void Thread::start | ( | ) |
démarre l'exécution du thread en parallèle au thread courant
IllegalThreadStateException | si le thread avait déjà été lancé | |
ThreadCreationFailed | si le thread n'a pu être crée |
on est le seul dans start, on peut faire cet appel
Définition à la ligne 147 du fichier Thread.cpp.
Références _isRunning, _isStarted, _synchronizedIsRunning, _synchronizedRun, _synchronizedStart, _thread, et threadHandler.
void Thread::join | ( | ) |
permet, dans le thread courant, d'attendre la fin d'exécution du thread
Définition à la ligne 173 du fichier Thread.cpp.
Références _isStarted, _synchronizedStart, _thread, et _wasJoined.
Référencé par Millie::GThread::~GThread().
ThreadID Thread::currentThread | ( | ) | [static] |
void Thread::notify | ( | ) |
permet de réveiller un thread endormi avec wait
Définition à la ligne 133 du fichier Thread.cpp.
Références _waitMutex, et _waitSynchro.
const std::string & Thread::getName | ( | ) | const |
permet d'obtenir le nom du thread
Définition à la ligne 190 du fichier Thread.cpp.
Références _name.
virtual void Millie::Thread::run | ( | ) | [inline, virtual] |
méthode virtuelle à redéfinir pour l'exécution en parallèle
Réimplémentée dans MonThread.
Définition à la ligne 209 du fichier Thread.hpp.
Référencé par Millie::threadHandler().
ThreadID Thread::getThreadId | ( | ) | const |
retourne l'identifiant du thread
Définition à la ligne 196 du fichier Thread.cpp.
Références _thread.
void* threadHandler | ( | void * | pthread | ) | [friend] |
std::string Millie::Thread::_name [private] |
bool Millie::Thread::_isAlive [private] |
Définition à la ligne 114 du fichier Thread.hpp.
Référencé par init(), isAlive(), Millie::threadHandler(), et ~Thread().
bool Millie::Thread::_isStarted [private] |
bool Millie::Thread::_wasJoined [private] |
Mutex Millie::Thread::_synchronized [private] |
Définition à la ligne 118 du fichier Thread.hpp.
pthread_mutex_t Millie::Thread::_waitMutex [private] |
Mutex Millie::Thread::_synchronizedWait [private] |
Définition à la ligne 120 du fichier Thread.hpp.
Mutex Millie::Thread::_synchronizedRun [private] |
Mutex Millie::Thread::_synchronizedIsAlive [private] |
Définition à la ligne 122 du fichier Thread.hpp.
Référencé par isAlive(), et Millie::threadHandler().
Mutex Millie::Thread::_synchronizedStart [private] |
Mutex Millie::Thread::_synchronizedWasJoined [private] |
Définition à la ligne 124 du fichier Thread.hpp.
pthread_cond_t Millie::Thread::_waitSynchro [private] |
pthread_t Millie::Thread::_thread [private] |
pthread_mutex_t Millie::Thread::_mutexWaitAll [private] |
Mutex Millie::Thread::_synchronizedIsRunning [protected] |
Définition à la ligne 133 du fichier Thread.hpp.
Référencé par isRunning(), start(), wait(), et Millie::GThread::waitAllGroup().
bool Millie::Thread::_isRunning [protected] |
Définition à la ligne 134 du fichier Thread.hpp.
Référencé par isRunning(), start(), wait(), et Millie::GThread::waitAllGroup().