Nebula
Loading...
Searching...
No Matches
Linux::LinuxThread Class Reference

#include <linuxthread.h>

Detailed Description

Linux implementation of Threading::Thread.

Uses the pthread API.

(C) 2010 Radon Labs GmbH (C) 2013-2018 Individual contributors, see AUTHORS file

Inherits Core::RefCounted.

Public Types

enum  Priority { Low , Normal , High }
 thread priorities More...

Public Member Functions

 LinuxThread ()
 constructor
virtual ~LinuxThread ()
 destructor
void SetPriority (Priority p)
 set the thread priority
Priority GetPriority () const
 get the thread priority
void SetThreadAffinity (uint mask)
 set thread affinity
uint GetThreadAffinity ()
 set thread affinity
void SetStackSize (SizeT s)
 set stack size in bytes
SizeT GetStackSize () const
 get stack size
void SetMaxStackSize (SizeT s)
 set maximum thread size
void SetName (const Util::String &n)
 set thread name
const Util::StringGetName () const
 get thread name
void Start ()
 start executing the thread code, returns when thread has actually started
void Stop ()
 request threading code to stop, returns when thread has actually finished
bool IsRunning () const
 return true if thread has been started
Public Member Functions inherited from Core::RefCounted
 RefCounted ()
 constructor
int GetRefCount () const
 get the current refcount
void AddRef ()
 increment refcount by one
void Release ()
 decrement refcount and destroy object if refcount is zero
bool IsInstanceOf (const Rtti &rtti) const
 return true if this object is instance of given class
bool IsInstanceOf (const Util::String &className) const
 return true if this object is instance of given class by string
bool IsInstanceOf (const Util::FourCC &classFourCC) const
 return true if this object is instance of given class by fourcc
bool IsA (const Rtti &rtti) const
 return true if this object is instance of given class, or a derived class
bool IsA (const Util::String &rttiName) const
 return true if this object is instance of given class, or a derived class, by string
bool IsA (const Util::FourCC &rttiFourCC) const
 return true if this object is instance of given class, or a derived class, by fourcc
const Util::StringGetClassName () const
 get the class name
Util::FourCC GetClassFourCC () const
 get the class FourCC code

Static Public Member Functions

static void YieldThread ()
 yield the thread (gives up current time slice)
static const char * GetMyThreadName ()
 get name of thread
static Threading::ThreadId GetMyThreadId ()
 get the thread ID of this thread
static bool GetMyThreadStopRequested ()
 get the stop-requested state of this thread (not yet implemented in Linux)
static int GetMyThreadPriority ()
 get the current actual thread-priority of this thread (platform specific!)
Static Public Member Functions inherited from Core::RefCounted
static void DumpRefCountingLeaks ()
 dump refcounting leaks, call at end of application (NEBULA_DEBUG builds only!)

Protected Member Functions

virtual void EmitWakeupSignal ()
 override this method if your thread loop needs a wakeup call before stopping
virtual void DoWork ()
 this method runs in the thread context
bool ThreadStopRequested () const
 check if stop is requested, call from DoWork() to see if the thread proc should quit
Protected Member Functions inherited from Core::RefCounted
virtual ~RefCounted ()
 destructor (called when refcount reaches zero)

Static Protected Member Functions

static void * ThreadProc (void *)
 Internal static helper method.

Private Types

enum  ThreadState { Initial , Running , Stopped }
 thread states More...

Private Member Functions

 __DeclareClass (LinuxThread)

Static Private Member Functions

static void SetMyThreadName (const Util::String &n)
 set thread name

Private Attributes

pthread_t thread
cpu_set_t affinity
Priority priority
SizeT stackSize
Util::String name
ThreadState volatile threadState
Threading::Event threadStartedEvent
Threading::Event stopRequestEvent

Member Enumeration Documentation

◆ Priority

thread priorities

Enumerator
Low 
Normal 
High 

◆ ThreadState

thread states

Enumerator
Initial 
Running 
Stopped 

Constructor & Destructor Documentation

◆ LinuxThread()

Linux::LinuxThread::LinuxThread ( )

constructor

◆ ~LinuxThread()

Linux::LinuxThread::~LinuxThread ( )
virtual

destructor

Member Function Documentation

◆ __DeclareClass()

Linux::LinuxThread::__DeclareClass ( LinuxThread )
private

◆ DoWork()

void Linux::LinuxThread::DoWork ( )
protectedvirtual

this method runs in the thread context

This method should be derived in a Thread subclass and contains the actual code which is run in the thread.

The method must not call C-Lib functions under Win32. To terminate the thread, just return from this function. If DoWork() runs in an infinite loop, call ThreadStopRequested() to check whether the Thread object wants the thread code to quit.

◆ EmitWakeupSignal()

void Linux::LinuxThread::EmitWakeupSignal ( )
protectedvirtual

override this method if your thread loop needs a wakeup call before stopping

This method is called by Thread::Stop() after setting the stopRequest event and before waiting for the thread to stop.

If your thread runs a loop and waits for jobs it may need an extra wakeup signal to stop waiting and check for the ThreadStopRequested() event. In this case, override this method and signal your event object.

◆ GetMyThreadId()

Threading::ThreadId Linux::LinuxThread::GetMyThreadId ( )
static

get the thread ID of this thread

Static method which returns the ThreadId of this thread.

◆ GetMyThreadName()

const char * Linux::LinuxThread::GetMyThreadName ( )
static

get name of thread

◆ GetMyThreadPriority()

int Linux::LinuxThread::GetMyThreadPriority ( )
static

get the current actual thread-priority of this thread (platform specific!)

◆ GetMyThreadStopRequested()

bool Linux::LinuxThread::GetMyThreadStopRequested ( )
static

get the stop-requested state of this thread (not yet implemented in Linux)

Static method which returns the stop-requested state of this thread.

Not yet implemented in Linux (see improvements to thread-local- data system under Linux in the Nebula mobile thread).

◆ GetName()

const Util::String & Linux::LinuxThread::GetName ( ) const
inline

get thread name

Get the thread's name.

This is the vanilla method which returns the name member.

◆ GetPriority()

LinuxThread::Priority Linux::LinuxThread::GetPriority ( ) const
inline

get the thread priority

◆ GetStackSize()

SizeT Linux::LinuxThread::GetStackSize ( ) const
inline

get stack size

◆ GetThreadAffinity()

uint Linux::LinuxThread::GetThreadAffinity ( )

set thread affinity

◆ IsRunning()

bool Linux::LinuxThread::IsRunning ( ) const

return true if thread has been started

Returns true if the thread is currently running.

◆ SetMaxStackSize()

void Linux::LinuxThread::SetMaxStackSize ( SizeT s)
inline

set maximum thread size

◆ SetMyThreadName()

void Linux::LinuxThread::SetMyThreadName ( const Util::String & n)
staticprivate

set thread name

Returns an array with infos about all currently existing thread objects.

◆ SetName()

void Linux::LinuxThread::SetName ( const Util::String & n)
inline

set thread name

Set the thread's name.

◆ SetPriority()

void Linux::LinuxThread::SetPriority ( Priority p)
inline

set the thread priority

◆ SetStackSize()

void Linux::LinuxThread::SetStackSize ( SizeT s)
inline

set stack size in bytes

◆ SetThreadAffinity()

void Linux::LinuxThread::SetThreadAffinity ( uint mask)

set thread affinity

◆ Start()

void Linux::LinuxThread::Start ( )

start executing the thread code, returns when thread has actually started

◆ Stop()

void Linux::LinuxThread::Stop ( )

request threading code to stop, returns when thread has actually finished

This stops the thread by signalling the stopRequestEvent and waits for the thread to actually quit.

If the thread code runs in a loop it should use the IsStopRequested() method to see if the thread object wants it to shutdown. If so DoWork() should simply return.

◆ ThreadProc()

void * Linux::LinuxThread::ThreadProc ( void * self)
staticprotected

Internal static helper method.

This is called by pthread_create() and simply calls the virtual DoWork() method on the thread object.

◆ ThreadStopRequested()

bool Linux::LinuxThread::ThreadStopRequested ( ) const
inlineprotected

check if stop is requested, call from DoWork() to see if the thread proc should quit

If the derived DoWork() method is running in a loop it must regularly check if the process wants the thread to terminate by calling ThreadStopRequested() and simply return if the result is true.

This will cause the thread to shut down.

◆ YieldThread()

void Linux::LinuxThread::YieldThread ( )
static

yield the thread (gives up current time slice)

Give up time slice.

Member Data Documentation

◆ affinity

cpu_set_t Linux::LinuxThread::affinity
private

◆ name

Util::String Linux::LinuxThread::name
private

◆ priority

Priority Linux::LinuxThread::priority
private

◆ stackSize

SizeT Linux::LinuxThread::stackSize
private

◆ stopRequestEvent

Threading::Event Linux::LinuxThread::stopRequestEvent
private

◆ thread

pthread_t Linux::LinuxThread::thread
private

◆ threadStartedEvent

Threading::Event Linux::LinuxThread::threadStartedEvent
private

◆ threadState

ThreadState volatile Linux::LinuxThread::threadState
private

The documentation for this class was generated from the following files: