|
Nebula
|
#include <linuxthread.h>
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::String & | GetName () 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::String & | GetClassName () 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 |
|
private |
| Linux::LinuxThread::LinuxThread | ( | ) |
constructor
|
virtual |
destructor
|
private |
|
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.
|
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.
|
static |
get the thread ID of this thread
Static method which returns the ThreadId of this thread.
|
static |
get name of thread
|
static |
get the current actual thread-priority of this thread (platform specific!)
|
static |
|
inline |
get thread name
Get the thread's name.
This is the vanilla method which returns the name member.
|
inline |
get the thread priority
|
inline |
get stack size
| uint Linux::LinuxThread::GetThreadAffinity | ( | ) |
set thread affinity
| bool Linux::LinuxThread::IsRunning | ( | ) | const |
return true if thread has been started
Returns true if the thread is currently running.
|
inline |
set maximum thread size
|
staticprivate |
set thread name
Returns an array with infos about all currently existing thread objects.
|
inline |
set thread name
Set the thread's name.
|
inline |
set the thread priority
|
inline |
set stack size in bytes
| void Linux::LinuxThread::SetThreadAffinity | ( | uint | mask | ) |
set thread affinity
| void Linux::LinuxThread::Start | ( | ) |
start executing the thread code, returns when thread has actually started
| 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.
|
staticprotected |
Internal static helper method.
This is called by pthread_create() and simply calls the virtual DoWork() method on the thread object.
|
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.
|
static |
yield the thread (gives up current time slice)
Give up time slice.
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |