GlobalObjects
Lade ...
Suche ...
Keine Treffer
EuEndlessPThread Klassenreferenz

Basisklasse für einen Thread der seine Arbeit endlos bis zum Abbruch ausführt. Mehr ...

#include <EuEndlessPThread.h>

Klassendiagramm für EuEndlessPThread:

Öffentliche Typen

enum  EuPTHREAD_ORDER { EuPTHREAD_WORK , EuPTHREAD_TAKE_A_BREAK , EuPTHREAD_END }
 
- Öffentliche Typen geerbt von EuAPThread
enum  EuPTHREAD_STATUS { EuPTHREAD_AT_THE_START , EuPTHREAD_WORKING , EuPTHREAD_PAUSING , EuPTHREAD_FINISHED }
 

Öffentliche Methoden

 EuEndlessPThread ()
 
virtual ~EuEndlessPThread ()
 
virtual int cancel ()
 
virtual int finishBreak ()
 
int getBreakCounter ()
 
void setExclusiveAccess ()
 
void signalInput ()
 
virtual int start ()
 
virtual int takeABreak ()
 
void unsetExclusiveAccess ()
 
void waitForInput ()
 
- Öffentliche Methoden geerbt von EuAPThread
 EuAPThread ()
 
virtual ~EuAPThread ()
 
virtual int join ()
 
EuAPThread::EuPTHREAD_STATUS status () const
 
void testCancel ()
 

Geschützte Methoden

void takeABreakWait ()
 
- Geschützte Methoden geerbt von EuAPThread
virtual void cleanUp ()
 
virtual void work ()=0
 

Geschützte, statische Methoden

static void * threadWork (void *pParam)
 
- Geschützte, statische Methoden geerbt von EuAPThread
static void _cleanUp (void *pParam)
 

Geschützte Attribute

bool m_bInExluzivAccess
 
pthread_cond_t m_BreakCond
 
EuPTHREAD_ORDER m_eThreadOrder
 
pthread_mutex_t m_ExclusiveAccessMutex
 
int m_iBreakCounter
 
sem_t m_Semaphore
 
- Geschützte Attribute geerbt von EuAPThread
EuPTHREAD_STATUS m_eThreadStatus
 
std::string m_strDebugInfo
 
pthread_t m_Thread
 

Private Methoden

 EuEndlessPThread (const EuEndlessPThread &)
 
EuEndlessPThreadoperator= (const EuEndlessPThread &)
 

Ausführliche Beschreibung

Basisklasse für einen Thread der seine Arbeit endlos bis zum Abbruch ausführt.

In Unterklassen muß lediglich die virtuale Methode EuAPThread::work() überschrieben werden.

Achtung
Der Thread muss nach dem start mit cancel() vor dem Aufruf des Destruktors beendet werden!
Zu beachten
Basiert auf 32 Bit POSIX Threads.
Autor
Helmut Jakoby

Dokumentation der Aufzählungstypen

◆ EuPTHREAD_ORDER

Einem abgeleiteten EuEndlessPThread können nach dem Start Befehle übergeben werden.

Aufzählungswerte
EuPTHREAD_WORK 

Thread soll arbeiten.

EuPTHREAD_TAKE_A_BREAK 

Thread soll das Arbeiten überspringen (nicht arbeiten, aber auch nicht abbrechen).

EuPTHREAD_END 

Thread soll sich beenden.

Beschreibung der Konstruktoren und Destruktoren

◆ EuEndlessPThread() [1/2]

EuEndlessPThread::EuEndlessPThread ( )

Standard-Konstruktor.

◆ ~EuEndlessPThread()

virtual EuEndlessPThread::~EuEndlessPThread ( )
virtual

Der Destruktor lässt m_ExclusiveAccessMutex, m_BreakCond und m_Semaphore aus dem Speicher entfernen.
Siehe auch die Beschreibung der Oberklassen.

Achtung
Es muss vor dem Destruktor die Methode cancel() aufgerufen werden! Da cancel() virtual, kann dieses nicht im dtor ausgeführt werden.
Ausnahmebehandlung
eut::ErrorNExceptionWenn der Thread schon gestartet und noch nicht beendet ist, wird eine Exception geworfen.

◆ EuEndlessPThread() [2/2]

EuEndlessPThread::EuEndlessPThread ( const EuEndlessPThread & )
private

Der Copy-Konstruktor steht nicht zur Verfügung.

Dokumentation der Elementfunktionen

◆ cancel()

virtual int EuEndlessPThread::cancel ( )
virtual

Beendet den Thread.

Achtung
Muss vor dem Destruktor aufgerufen werden, wenn mit start() gestartet!
Da cancel() virtual, kann dieses nicht im dtor ausgeführt werden.
Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler bzw. ein Info an.
Achtung
Der Thread muss mit start() gestartet worden sein.

Erneute Implementation von EuAPThread.

◆ finishBreak()

virtual int EuEndlessPThread::finishBreak ( )
virtual

Beendet die Bearbeitungs-Pause ( wenn m_iBreakCounter == 0 ). Muss über takeABreak() initiiert worden sein.

Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ getBreakCounter()

int EuEndlessPThread::getBreakCounter ( )

Liefert m_iBreakCounter.

◆ operator=()

EuEndlessPThread & EuEndlessPThread::operator= ( const EuEndlessPThread & )
private

Der Zuweisungsoperator steht nicht zur Verfügung.

◆ setExclusiveAccess()

void EuEndlessPThread::setExclusiveAccess ( )

Setzt eine Sperre seines Mutex. Muss mittels unsetExclusiveAccess() wieder aufgehoben werden.

◆ signalInput()

void EuEndlessPThread::signalInput ( )

Beendet das Warten ohne Tätigkeit, welches durch waitForInput() initiiert wurde.

◆ start()

virtual int EuEndlessPThread::start ( )
virtual

Startet den Thread.

Rückgabe
Ein Rückgabewert < 0 zeigt einen Fehler an. Z.B. wenn Thread schon läuft.
Achtung
Der Thread muss nach start() vor den Destruktor mittels cancel() beendet werden.

Implementiert EuAPThread.

◆ takeABreak()

virtual int EuEndlessPThread::takeABreak ( )
virtual

Setzt m_eThreadOrder auf EuPTHREAD_TAKE_A_BREAK. Diese methode kann genutzt werden, um die Bearbeitung zu überspringen bzw. auszusparen.
Muss durch finishBreak() beendet werden.

Rückgabe
Eine Rückgabe < 0 zeigt einen Fehler an.

◆ takeABreakWait()

void EuEndlessPThread::takeABreakWait ( )
protected

Wird in threadWork( void * pParam ) zum Pausieren benötigt.

◆ threadWork()

static void * EuEndlessPThread::threadWork ( void * pParam)
staticprotected

Diese Methode wird in start() benötigt.

Parameter
[in]pParamDamit diese statische Methode auf die Methode EuAPThread::work() zugreifen kann, wird in pParam eine Referenz auf die jeweilige Instanz auf ein Objekt vom Typ EuEndlessPThread bzw. Unterklasse erwartet.
Siehe auch
EuAPThread::_cleanUp(void * pParam)

◆ unsetExclusiveAccess()

void EuEndlessPThread::unsetExclusiveAccess ( )

Hebt eine Sperre seines Mutex auf, wenn durch setExclusiveAccess() gesetzt.

◆ waitForInput()

void EuEndlessPThread::waitForInput ( )

Läßt den Thread an definierter Position ohne Tätigkeit warten. Muss durch signalInput() wieder beendet werden.

Dokumentation der Datenelemente

◆ m_bInExluzivAccess

bool EuEndlessPThread::m_bInExluzivAccess
protected

Um einen Mutex zu setzten wird dieses Attribut benötigt.

◆ m_BreakCond

pthread_cond_t EuEndlessPThread::m_BreakCond
protected

Dieses Attribut ist notwendig, um den Thread pausieren lassen zu können.

◆ m_eThreadOrder

EuPTHREAD_ORDER EuEndlessPThread::m_eThreadOrder
protected

Einem Thread kann ein Befehl gegeben werden der hier gesetzt wird.

◆ m_ExclusiveAccessMutex

pthread_mutex_t EuEndlessPThread::m_ExclusiveAccessMutex
protected

Dieser Thraed braucht einen Mutex, um lokale Variablen zu schützen.

◆ m_iBreakCounter

int EuEndlessPThread::m_iBreakCounter
protected

Wenn ein EuEndlessPThread pausieren soll, wird dieser Zähler incrementiert und beim Aufwecken wieder decrementiert. Bei 0 wird der Thread wieder aufgeweckt.

Damit wird ein geschachteltes schlafen legen und auwecken ermöglicht.

◆ m_Semaphore

sem_t EuEndlessPThread::m_Semaphore
protected

Kann genutzt werden, damit der Thread nicht im Leerlauf arbeitet. Das ist nicht mit dem Pausieren zu vergleichen, wo der Thread nur die Verarbeitung auslässt.


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