GlobalObjects
|
Basisklasse für einen Thread der seine Arbeit endlos bis zum Abbruch ausführt. Mehr ...
#include <EuRepeatingThread.h>
Öffentliche Typen | |
enum | EuTHREADERROR { EuTHREAD_ERR_NO_THREAD = -10301 , EuTHREAD_ERR_THREAD_ALREADY_WORKING = -10302 , EuTHREAD_ERR_THREAD_BREAK_COUNT_LESS_THAN_ZERO = -10303 , EuTHREAD_ERR_UNKNOWN = -10400 } |
Fehlerbereich = -10301 bis -10400 Mehr ... | |
enum | ORDER { eUNDEFINED , eDO_WORK , eEXIT } |
enum | STATUS { eAT_THE_START , eWORKING , ePAUSING , eENDING , eCOMPLETED } |
Öffentliche Methoden | |
RepeatingThread () | |
virtual | ~RepeatingThread () |
virtual void | cancel () |
virtual void | finishBreak () |
int | getBreakCounter () |
bool | isInExclusiveAccess () const |
void | setExclusiveAccess () |
void | signalInput () |
virtual int | start () |
RepeatingThread::STATUS | status () const |
virtual void | takeABreak () |
bool | testCancel () |
void | unsetExclusiveAccess () |
void | waitForInput () |
Öffentliche Attribute | |
std::string | m_strDebugInfo |
Geschützte Methoden | |
ORDER | getOrder () |
STATUS | getStatus () |
void | setStatus (STATUS eStatus) |
void | threadWork () |
void | toOrder (ORDER eOrder) |
virtual void | work ()=0 |
Private Methoden | |
RepeatingThread (const RepeatingThread &) | |
RepeatingThread & | operator= (const RepeatingThread &) |
Private Attribute | |
std::condition_variable | m_BreakCondVar |
std::mutex | m_BreakMutex |
ORDER | m_eOrder |
STATUS | m_eStatus |
CriticalSection | m_ExclusiveAccessSection |
int | m_iBreakCounter |
int | m_iDataReady |
std::condition_variable | m_InputCondVar |
std::thread * | m_pThread |
std::mutex | m_WaitMutex |
Basisklasse für einen Thread der seine Arbeit endlos bis zum Abbruch ausführt.
In Unterklassen muß lediglich die virtuale Methode RepeatingThread::work() überschrieben werden.
Fehlerbereich = -10301 bis -10400
Einem RepeatingThread können nach dem Start Anweisungen übergeben werden.
Aufzählungswerte | |
---|---|
eUNDEFINED | Undefiniert. |
eDO_WORK | Thread soll arbeiten. |
eEXIT | Thread soll sich beenden. |
Um den Thread steuern zu können, ist es förderlich, wenn der Arbeitsstatus bekannt ist.
eut::RepeatingThread::RepeatingThread | ( | ) |
Standartkonstruktor.
|
virtual |
|
private |
Der Copy-Konstruktor steht nicht zur Verfügung.
|
virtual |
Beendet den Thread.
Erneute Implementation in glo::ClientThread, glo::CommunicaterThread, glo::LocalThread, glo::Server, glo::WatchNotifyManager, tcp::Client, tcp::ClientReceiver, tcp::Server, tcp::ServerAcceptReceiver, tcp::ServerReceiver und tcp::Transmitter.
|
virtual |
Beendet die Bearbeitungs-Pause. Muss über takeABreak() initiiert worden sein.
Erneute Implementation in tcp::ReceiverTransmitter.
int eut::RepeatingThread::getBreakCounter | ( | ) |
Liefert den Pausenzähler.
|
protected |
Liefert die letzte übergebene Anweisung.
|
protected |
Liefert den aktuellen Status.
bool eut::RepeatingThread::isInExclusiveAccess | ( | ) | const |
Ist der Thread in einem exclusiven Bereich?
|
private |
Zuweisungsoperator steht nicht zur Verfügung.
void eut::RepeatingThread::setExclusiveAccess | ( | ) |
Initiiert eine CriticalSection. Muss mittels unsetExclusiveAccess() wieder aufgehoben werden.
|
protected |
Setzt den Status.
[in] | eStatus | Der zu setzende Status. |
void eut::RepeatingThread::signalInput | ( | ) |
Beendet das Warten ohne Tätigkeit, welches durch waitForInput() initiiert wurde.
|
virtual |
RepeatingThread::STATUS eut::RepeatingThread::status | ( | ) | const |
Liefert den Status des Threads.
|
virtual |
Initiiert ein pausieren des Threads um die Bearbeitung zu unterbrechen. Muss durch finishBreak() wieder beendet werden.
Erneute Implementation in tcp::ReceiverTransmitter.
bool eut::RepeatingThread::testCancel | ( | ) |
Liefert true, wenn Thread beendet wurde.
|
protected |
Diese Methode, vom Thread ausgeführt, ruft in einer Schleife die Methode work() auf.
|
protected |
Übernimmt die übergebene Anweisung.
[in] | eOrder | Die zu setzende Anweisungen. |
void eut::RepeatingThread::unsetExclusiveAccess | ( | ) |
Hebt eine initiierte CriticalSection auf, wenn durch setExclusiveAccess() gesetzt.
void eut::RepeatingThread::waitForInput | ( | ) |
Läßt den Thread an definierter Position ohne Tätigkeit warten. Muss durch signalInput() wieder beendet werden.
|
protectedpure virtual |
Diese Methode wird vom Thread ausgeführt und muß in Unterklassen überschrieben werden.
Implementiert in glo::CommunicaterThread, glo::Communicator, glo::Manager, glo::WatchNotifyManager, tcp::Client, tcp::ClientReceiver, tcp::Server, tcp::ServerAcceptReceiver, tcp::ServerReceiver und tcp::Transmitter.
|
private |
Condition_variable um zu pausieren.
|
private |
Mutex um zu pausieren.
|
private |
Einem Thread kann ein Befehl gegeben werden der hier gesetzt wird.
|
private |
Der Arbeitsstatus.
|
private |
Wird benötigt, um durch RepeatingThread::setExclusiveAccess() bzw. RepeatingThread::unsetExclusiveAccess() zugriffsgeschützte Bereiche zu definieren.
|
private |
Wenn ein RepeatingThread pausieren soll, wird dieser Zähler incrementiert. Wenn der Thread wieder aufwachen soll, wird dieser Zähler decrementiert. Bei 0 wird der Thread wieder aufgeweckt.
Damit wird ein geschachteltes schlafen legen und auwecken ermöglicht.
|
private |
Um "lost wakeup" und "spurious wakeups" zu vermeiden, ist diese Variable notwendig.
|
private |
Condition_variable zum warten auf Eingabe.
|
private |
Der 'echte' Thread.
std::string eut::RepeatingThread::m_strDebugInfo |
Hier kann für DEBUG-Zwecke etwas reingeschrieben werden.
|
private |
Mutex zum warten auf Eingabe.