Klasse zum Verwalten mehrerer Threads in einem Pool.
Mehr ...
- 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.
| ppl7::ThreadPool::~ThreadPool |
( |
| ) |
|
- Beschreibung:
- Falls noch Threads im Pool vorhanden sind, werden diese gestoppt und gelöscht.
| void ppl7::ThreadPool::addThread |
( |
Thread * |
thread | ) |
|
- Beschreibung:
- Der angegebene Thread
thread wird dem Pool hinzugefügt.
- Parameter
-
- 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();
- 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
-
- 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
- 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
-
| DeadlockException | Wird geworfen, wenn durch das Sperren des Mutex ein Deadlock entstehen würde |
| MutexLockingException | Mutex 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
-
| 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
-
| MutexNotLockedException | Mutex war nicht gesperrt |
| MutexLockingException | Mutex konnte nicht entsperrt werden |
| std::set<Thread*> ppl7::ThreadPool::threads |
|
private |
Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien:
- /jenkins/jobs/clang_ppl7/workspace/include/ppl7.h
- /jenkins/jobs/clang_ppl7/workspace/src/core/ThreadPool.cpp