PPL7-Icon Patrick's Programming Library Version 7.0.0 - Dokumentation
ppl7::ThreadPool Klassenreferenz

Klasse zum Verwalten mehrerer Threads in einem Pool. Mehr ...

Öffentliche Typen

typedef std::set< Thread * >
::const_iterator 
const_iterator
 
typedef std::set< Thread * >
::iterator 
iterator
 

Öffentliche Methoden

 ~ThreadPool ()
 Destruktor. Mehr ...
 
void addThread (Thread *thread)
 Thread in den Pool hinzufügen. Mehr ...
 
ThreadPool::iterator begin ()
 Iterator auf den ersten Thread im Pool. Mehr ...
 
ThreadPool::const_iterator begin () const
 Iterator auf den ersten Thread im Pool. Mehr ...
 
void clear ()
 Alle Threads aus dem Pool entfernen. Mehr ...
 
size_t count ()
 Anzahl Threads im Pool. Mehr ...
 
size_t count_running ()
 Anzahl aktiver Threads im Pool. Mehr ...
 
void destroyAllThreads ()
 Alle Threads stoppen, aus dem Pool entfernen und löschen. Mehr ...
 
void destroyThread (Thread *thread)
 Thread aus aus dem Pool entfernen und löschen. Mehr ...
 
ThreadPool::iterator end ()
 Iterator auf das Ende des ThreadPools. Mehr ...
 
ThreadPool::const_iterator end () const
 Iterator auf das Ende des ThreadPools. Mehr ...
 
void lock ()
 ThreadPool sperren Mehr ...
 
void removeThread (Thread *thread)
 Thread aus dem Pool entfernen. Mehr ...
 
bool running ()
 Sind im Pool aktive Threads? Mehr ...
 
void signalStopThreads ()
 Threads auffordern zu stoppen. Mehr ...
 
size_t size ()
 Anzahl Threads im Pool. Mehr ...
 
void startThreads ()
 Threads starten. Mehr ...
 
void stopThreads ()
 Threads stoppen. Mehr ...
 
void unlock ()
 ThreadPool entsperren Mehr ...
 

Private Attribute

ppl7::Mutex mutex
 
std::set< Thread * > threads
 

Ausführliche Beschreibung

Beschreibung:
Mit dieser Klasse können beliebig viele Threads in einem Pool verwaltet werden. Über den Pool können sie gemeinsam gestartet, überwacht, gestoppt und gelöscht werden. Zur Laufzeit können jederzeit Threads hinzugefügt oder entfernt werden. Mittels Iteratoren und den Methoden ThreadPool::begin und ThreadPool::end kann die Anwendung auch selbst über die Threads iterieren.
Ein Thread muss von der Klasse ppl7::Thread abgeleitet sein.

Dokumentation der benutzerdefinierten Datentypen

Beschreibung der Konstruktoren und Destruktoren

ppl7::ThreadPool::~ThreadPool ( )
Beschreibung:
Falls noch Threads im Pool vorhanden sind, werden diese gestoppt und gelöscht.

Dokumentation der Elementfunktionen

void ppl7::ThreadPool::addThread ( Thread thread)
Beschreibung:
Der angegebene Thread thread wird dem Pool hinzugefügt.
Parameter
threadPointer auf dem Thread
ThreadPool::iterator ppl7::ThreadPool::begin ( )
Beschreibung:
Liefert einen Iterator auf den ersten Thread im Pool zurück.
Zu beachten
Falls Sie mit ThreadPool::begin und ThreadPool::end über alle Threads iterieren wollen und die Gefahr besteht, dass andere Threads den Pool verändern könnten, sollten Sie den Pool vorher mittels ThreadPool::lock sperren und am Ende mit ThreadPool::unlock wieder freigeben.
Rückgabe
Iterator auf den ersten Thread im Pool
Beispiel: Beispiel zum Iterieren über alle Threads
ThreadPool pool;
...
ThreadPool::iterator it;
pool.lock();
for (it=pool.begin();it!=pool.end();++it) {
printf ("Thread %llu is %s\n",
(*it)->threadGetID(),
((*it)->threadIsRunning()?"running":"stopped"));
}
pool.unlock();
ThreadPool::const_iterator ppl7::ThreadPool::begin ( ) const
Beschreibung:
Liefert einen Iterator auf den ersten Thread im Pool zurück.
Zu beachten
Falls Sie mit ThreadPool::begin und ThreadPool::end über alle Threads iterieren wollen und die Gefahr besteht, dass andere Threads den Pool verändern könnten, sollten Sie den Pool vorher mittels ThreadPool::lock sperren und am Ende mit ThreadPool::unlock wieder freigeben.
Rückgabe
Iterator auf den ersten Thread im Pool
Beispiel: Beispiel zum Iterieren über alle Threads
ThreadPool pool;
...
ThreadPool::iterator it;
pool.lock();
for (it=pool.begin();it!=pool.end();++it) {
printf ("Thread %llu is %s\n",
(*it)->threadGetID(),
((*it)->threadIsRunning()?"running":"stopped"));
}
pool.unlock();
void ppl7::ThreadPool::clear ( )
Beschreibung:
Alle Threads werden aus dem Pool entfernt. Die Threads selber bleiben unberührt, laufen also ggfs. weiter und belegen Speicher. Falls die Threads auch gestoppt und gelöscht werden sollen, verwenden Sie bitte ThreadPool::destroyAllThreads.
size_t ppl7::ThreadPool::count ( )
Beschreibung:
Liefert die Anzahl Threads im Pool zurück, unabhängig davon, ob sie grade aktiv sind.
Rückgabe
Anzahl Threads
size_t ppl7::ThreadPool::count_running ( )
Beschreibung:
Liefert die Anzahl Threads im Pool zurück, die grade aktiv sind.
Rückgabe
Anzahl Threads
void ppl7::ThreadPool::destroyAllThreads ( )
Beschreibung:
Alle Threads werden gestoppt, gelöscht (Aufruf des Destruktors des Threads) und aus dem Pool entfernt.
void ppl7::ThreadPool::destroyThread ( Thread thread)
Beschreibung:
Der angegebene Thread thread wird aus dem Pool entfernt, sofern er darin vorhanden war, und anschließend gelöscht. Falls notwendig, wird er vorher noch gestoppt.
Parameter
threadPointer auf dem Thread
ThreadPool::iterator ppl7::ThreadPool::end ( )
Beschreibung:
Liefert einen Iterator zurück, der hinter den letzten Thread im Pool zeigt.
Siehe auch
ThreadPool::begin
Rückgabe
Iterator auf das Ende des ThreadPools
ThreadPool::const_iterator ppl7::ThreadPool::end ( ) const
Beschreibung:
Liefert einen Iterator zurück, der hinter den letzten Thread im Pool zeigt.
Siehe auch
ThreadPool::begin
Rückgabe
Iterator auf das Ende des ThreadPools
void ppl7::ThreadPool::lock ( )
Beschreibung:
Falls mehrere Operationen durchgeführt werden sollen, zwischen denen sich der Pool nicht ändern darf (zum Beispiel beim Durchiterieren) kann der Pool vorher mit dieser Methode gesperrt werden. Nach Abschluss der Operationen muss der Pool mit ThreadPool::unlock wieder freigegeben werden.
Ausnahmebehandlung
DeadlockExceptionWird geworfen, wenn durch das Sperren des Mutex ein Deadlock entstehen würde
MutexLockingExceptionMutex konnte nicht gesperrt werden
void ppl7::ThreadPool::removeThread ( Thread thread)
Beschreibung:
Der angegebene Thread thread wird aus dem Pool entfernt. Die Anwendung ist anschließend dafür verantwortlich den Thread zu stoppen und zu löschen.
Parameter
threadPointer auf dem Thread
bool ppl7::ThreadPool::running ( )
Beschreibung:
Diese Methode prüft, ob im Pool Threads enthalten sind, die grade aktiv sind.
Rückgabe
Gibt true oder false zurück
void ppl7::ThreadPool::signalStopThreads ( )
Beschreibung:
Signalisiert allen Threads, dass sie sich beenden sollen. Die Methode wartet jedoch nicht, bis sich die Threads tatsächlich beendet haben. Bitte verwenden Sie ThreadPool::stopThreads, wenn Sie sicherstellen wollen, dass sich die Threads tatsächlich beendet haben.
size_t ppl7::ThreadPool::size ( )
Beschreibung:
Liefert die Anzahl Threads im Pool zurück, unabhängig davon, ob sie grade aktiv sind.
Rückgabe
Anzahl Threads
void ppl7::ThreadPool::startThreads ( )
Beschreibung:
Startet alle Threads im Pool, die noch nicht aktiv sind.
void ppl7::ThreadPool::stopThreads ( )
Beschreibung:
Stoppt alle Threads im Pool, die aktiv sind. Die Methode kehrt erst dann zurück, wenn alle Threads gestoppt sind.
Zu beachten
Es ist sichergestellt, dass ein runterfahrender Thread sich bei Bedarf selbst aus dem Pool löschen kann, ohne einen Deadlock zu verursachen.
void ppl7::ThreadPool::unlock ( )
Beschreibung:
Entsperrt einen zuvor mit ThreadPool::lock gesperrten Pool.
Ausnahmebehandlung
MutexNotLockedExceptionMutex war nicht gesperrt
MutexLockingExceptionMutex konnte nicht entsperrt werden

Dokumentation der Datenelemente

ppl7::Mutex ppl7::ThreadPool::mutex
private
std::set<Thread*> ppl7::ThreadPool::threads
private

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: