libUTL++
utl::Thread Class Referenceabstract

Thread of execution. More...

#include <Thread.h>

Inheritance diagram for utl::Thread:

Public Member Functions

virtual const ObjectgetKey () const
 Get the key for this object. More...
 
size_t id () const
 Get the thread's ID. More...
 
uint_t node () const
 Get the thread's assigned node (NUMA). More...
 
uint_tnode ()
 Get the thread's assigned node (NUMA). More...
 
bool isDetached () const
 Determine whether the thread is detached. More...
 
void cancel ()
 Cancel the thread. More...
 
void * join (bool deleteSelf=true)
 Join on the thread. More...
 
virtual void * run (void *arg=nullptr)=0
 Run the thread. More...
 
void start (void *arg=nullptr, bool join=true)
 Start the thread. More...
 
virtual void pause ()
 Clean up stored state in preparation for re-use. More...
 
randutils::mt19937_64_rng * rng ()
 Get the random generator (initialize it if necessary). More...
 
- Public Member Functions inherited from utl::Object
void clear ()
 Revert to initial state. More...
 
virtual int compare (const Object &rhs) const
 Compare with another object. More...
 
virtual void copy (const Object &rhs)
 Copy another instance. More...
 
virtual void vclone (const Object &rhs)
 Make an exact copy of another instance. More...
 
virtual void steal (Object &rhs)
 "Steal" the internal representation from another instance. More...
 
virtual void dump (Stream &os, uint_t level=uint_t_max) const
 Dump a human-readable representation of self to the given output stream. More...
 
void dumpWithClassName (Stream &os, uint_t indent=4, uint_t level=uint_t_max) const
 Front-end for dump() that prints the object's class name. More...
 
bool hasKey () const
 Determine whether or not the object has a key. More...
 
virtual const ObjectgetProxiedObject () const
 Get the proxied object (= self if none). More...
 
virtual ObjectgetProxiedObject ()
 Get the proxied object (= self if none). More...
 
virtual size_t hash (size_t size) const
 Get the hash code for the object. More...
 
bool _isA (const RunTimeClass *runTimeClass) const
 Determine whether self's class is a descendent of the given class. More...
 
virtual String toString () const
 Return a string representation of self. More...
 
 operator String () const
 Conversion to String. More...
 
size_t allocatedSize () const
 Get the total allocated size of this object. More...
 
virtual size_t innerAllocatedSize () const
 Get the "inner" allocated size. More...
 
virtual void addOwnedIt (const class FwdIt *it) const
 Notify self that it owns the given iterator. More...
 
virtual void removeOwnedIt (const class FwdIt *it) const
 Notify self that the given owned iterator has been destroyed. More...
 
bool operator< (const Object &rhs) const
 Less-than operator. More...
 
bool operator<= (const Object &rhs) const
 Less-than-or-equal-to operator. More...
 
bool operator> (const Object &rhs) const
 Greater-than operator. More...
 
bool operator>= (const Object &rhs) const
 Greater-than-or-equal-to operator. More...
 
bool operator== (const Object &rhs) const
 Equal-to operator. More...
 
bool operator!= (const Object &rhs) const
 Unequal-to operator. More...
 
void serializeIn (Stream &is, uint_t mode=ser_default)
 Serialize from an input stream. More...
 
void serializeOut (Stream &os, uint_t mode=ser_default) const
 Serialize to an output stream. More...
 
virtual void serialize (Stream &stream, uint_t io, uint_t mode=ser_default)
 Serialize to or from a stream. More...
 
void serializeOutBoxed (Stream &os, uint_t mode=ser_default) const
 Serialize a boxed object to an output stream. More...
 
- Public Member Functions inherited from utl::NamedObjectMI
 NamedObjectMI ()
 Constructor.
 
 NamedObjectMI (const String &name)
 Constructor. More...
 
void clear ()
 Clear the name. More...
 
const StringgetName () const
 Get the name. More...
 
const StringgetNamePtr () const
 Get the address of the name. More...
 
void setName (const String &name)
 Set the name. More...
 

Static Public Member Functions

static Threadget ()
 Get a pointer to the current thread's Thread object. More...
 
static thread_handle_t handle ()
 Get a handle to the current thread. More...
 
static void testCancel ()
 Test for cancellation. More...
 
static void yield ()
 Yield the processor to allow another thread to run. More...
 
static ulong_t tlsNew ()
 Return a newly created TLS key. More...
 
static void * tlsGet (ulong_t key)
 Get the value of a key in TLS. More...
 
static void tlsSet (ulong_t key, void *value)
 Set the value of a key in TLS. More...
 
- Static Public Member Functions inherited from utl::Object
static ObjectserializeInNullable (Stream &is, uint_t mode=ser_default)
 Serialize a nullptr-able object from an input stream. More...
 
static void serializeOutNullable (const Object *object, Stream &os, uint_t mode=ser_default)
 Serialize a nullptr-able object to an output stream. More...
 
static void serializeNullable (Object *&object, Stream &stream, uint_t io, uint_t mode=ser_default)
 Serialize a nullptr-able object to or from a stream. More...
 
static ObjectserializeInBoxed (Stream &is, uint_t mode=ser_default)
 Serialize a boxed object from an input stream. More...
 
static void serializeBoxed (Object *&object, Stream &stream, uint_t io, uint_t mode=ser_default)
 Serialize a boxed object to or from a stream. More...
 

Additional Inherited Members

- Protected Member Functions inherited from utl::FlagsMI
 FlagsMI ()
 Constructor. More...
 
virtual ~FlagsMI ()
 Destructor. More...
 
void copyFlags (const FlagsMI &rhs)
 Copy the given flags. More...
 
void copyFlags (const FlagsMI &rhs, uint_t lsb, uint_t msb)
 Copy (some of) the given flags. More...
 
void copyFlags (uint64_t flags, uint_t lsb, uint_t msb)
 Copy (some of) the given flags. More...
 
bool getFlag (uint_t flagNum) const
 Get a user-defined flag. More...
 
void setFlag (uint_t flagNum, bool val)
 Set a user-defined flag. More...
 
uint64_t getFlagsNumber (uint64_t mask, uint64_t shift=0)
 Get a multi-bit value in the flags data (which is stored as one 64-bit integer). More...
 
void setFlagsNumber (uint64_t mask, uint64_t shift, uint64_t num)
 Set a multi-bit value in the flags data (which is stored as one 64-bit integer). More...
 
uint64_t getFlags () const
 Get the flags. More...
 
void setFlags (uint64_t flags)
 Set the flags. More...
 

Detailed Description

Thread of execution.

Thread's main purpose is to encapsulate the native OS's implementation of threads. A Thread object must always be created on the heap (via new). When you create a thread, you can either create it in detached mode or in joinable mode. The Thread object for a detached thread will automatically be deleted when the thread terminates. The Thread object for a joinable thread will not be deleted until you've successfully join()'d on it.

Author
Adam McKee

Definition at line 31 of file Thread.h.

Member Function Documentation

◆ getKey()

virtual const Object& utl::Thread::getKey ( ) const
virtual

Get the key for this object.

The key for an object is used to re-start the comparison process when all overridden compare() have failed. Usually an object's key uniquely identifies the object, though it doesn't necessarily need to. By default, a class has no associated key.

See also
compare hasKey
Returns
object's key (= self if the object has no key)

Reimplemented from utl::Object.

Reimplemented in utl::NetServerClient.

◆ get()

static Thread* utl::Thread::get ( )
static

Get a pointer to the current thread's Thread object.

◆ handle()

static thread_handle_t utl::Thread::handle ( )
static

Get a handle to the current thread.

◆ id()

size_t utl::Thread::id ( ) const
inline

Get the thread's ID.

Definition at line 47 of file Thread.h.

◆ node() [1/2]

uint_t utl::Thread::node ( ) const
inline

Get the thread's assigned node (NUMA).

Definition at line 54 of file Thread.h.

◆ node() [2/2]

uint_t& utl::Thread::node ( )
inline

Get the thread's assigned node (NUMA).

Definition at line 61 of file Thread.h.

◆ isDetached()

bool utl::Thread::isDetached ( ) const
inline

Determine whether the thread is detached.

Definition at line 68 of file Thread.h.

◆ cancel()

void utl::Thread::cancel ( )
inline

Cancel the thread.

After calling cancel(), a call to testCancel() will throw a ThreadCancelledEx.

Definition at line 78 of file Thread.h.

References utl::deInit(), and utl::init().

◆ testCancel()

static void utl::Thread::testCancel ( )
static

Test for cancellation.

If the thread has been cancelled (with cancel()), throw a ThreadCancelledEx - causing termination of the thread.

◆ join()

void* utl::Thread::join ( bool  deleteSelf = true)

Join on the thread.

The calling thread's execution will be blocked until the thread has terminated. You must make a single call to join() for each non-detached thread you create, or you will leak memory.

Parameters
deleteSelf(optional : true) override if you prefer to delete the object yourself
Returns
the thread's return value

◆ run()

virtual void* utl::Thread::run ( void *  arg = nullptr)
pure virtual

Run the thread.

run() is essentially the thread's main(); it does whatever the thread was created to do. You will need to override this virtual method in your derived class.

Parameters
arguser-defined thread parameter
Returns
the thread's return value

Implemented in utl::NetServerClient, and utl::NetServer.

◆ start()

void utl::Thread::start ( void *  arg = nullptr,
bool  join = true 
)

Start the thread.

After creating a Thread object (via new), you must start it by calling start().

Parameters
argthread parameter
joinwhether the thread will be joined

◆ yield()

static void utl::Thread::yield ( )
static

Yield the processor to allow another thread to run.

◆ pause()

virtual void utl::Thread::pause ( )
virtual

Clean up stored state in preparation for re-use.

Reimplemented in utl::NetServerClient.

◆ tlsNew()

static ulong_t utl::Thread::tlsNew ( )
static

Return a newly created TLS key.

◆ tlsGet()

static void* utl::Thread::tlsGet ( ulong_t  key)
static

Get the value of a key in TLS.

◆ tlsSet()

static void utl::Thread::tlsSet ( ulong_t  key,
void *  value 
)
static

Set the value of a key in TLS.

Parameters
keyTLS key
valuenew value for the key in the calling thread

◆ rng()

randutils::mt19937_64_rng* utl::Thread::rng ( )

Get the random generator (initialize it if necessary).


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