# class Thread

Thread support class. More...

Full name | `TelEngine::Thread`
Definition | `#include <yateclass.h>`
Inherits | TelEngine::Runnable [public ]
Inherited by | Router
List of all Methods

Annotated List
Files
Globals
Hierarchy
Index

#### Public Types

- enum Priority { Lowest, Low, Normal, High, Highest }

#### Public Methods

- virtual void cleanup ()
- bool startup ()
- bool error () const
- bool running () const
- inline int locks () const
- inline bool locked () const
- const char* name () const
- void cancel (bool hard = false)
- inline bool isCurrent () const

#### Public Static Methods

- static const char* currentName ()
- static void yield (bool exitCheck = false)
- static void idle (bool exitCheck = false)
- static void sleep (unsigned int sec, bool exitCheck = false)
- static void msleep (unsigned long msec, bool exitCheck = false)
- static void usleep (unsigned long usec, bool exitCheck = false)
- static unsigned long idleUsec ()
- static unsigned long idleMsec ()
- static void idleMsec (unsigned long msec)
- static Thread* current ()
- static int count ()
- static bool check (bool exitNow = true)
- static void exit ()
- static Priority priority (const char* name, Priority defvalue = Normal)
- static const char* priority (Priority prio)
- static void killall ()
- static void preExec ()
- static int lastError ()
- static inline bool errorString (String& buffer)
- static bool errorString (String& buffer, int code)

#### Protected Methods

- Thread (const char *name = 0, Priority prio = Normal)
- Thread (const char *name, const char* prio)
- virtual ~Thread ()

## Detailed Description

A thread is a separate execution context that exists in the same address space. Threads make better use of multiple processor machines and allow blocking one execution thread while allowing other to run.

enum Priority { Lowest, Low, Normal, High, Highest }

### Priority

Running priorities, their mapping is operating system dependent

void cleanup ()

### cleanup

[virtual]

This method is called when the current thread terminates.

bool startup ()

### startup

Actually starts running the new thread which lingers after creation

Returns: False if an error occured, true if started ok

bool error ()

### error

[const]

Check if the thread creation failed

Returns: True if an error occured, false if created ok

bool running ()

### running

[const]

Check if the thread is running or not

Returns: True if running, false if it has terminated or no startup called

inline int locks ()

### locks

[const]

Count how many Yate mutexes are kept locked by this thread

Returns: Number of Mutex locks held by this thread

inline bool locked ()

### locked

[const]

Check if the thread is currently helding or attempting to lock a mutex

Returns: True if the current thread is in an unsafe to cancel state

const char* name ()

### name

[const]

Get the name of this thread

Returns: The pointer that was passed in the constructor

const char* currentName ()

### currentName

[static]

Get the name of the currently running thread

Returns: The pointer that was passed in the thread's constructor

void yield (bool exitCheck = false)

### yield

[static]

Give up the currently running timeslice. Note that on some platforms it also sleeps for the operating system's scheduler resolution

Parameters:

exitCheck | Terminate the thread if asked so

void idle (bool exitCheck = false)

### idle

[static]

Sleep for a system dependent period adequate for an idle thread. On most operating systems this is a 5 msec sleep.

Parameters:

exitCheck | Terminate the thread if asked so

void sleep (unsigned int sec, bool exitCheck = false)

### sleep

[static]

Sleep for a number of seconds

Parameters:

sec | Number of seconds to sleep
exitCheck | Terminate the thread if asked so

void msleep (unsigned long msec, bool exitCheck = false)

### msleep

[static]

Sleep for a number of milliseconds

Parameters:

msec | Number of milliseconds to sleep
exitCheck | Terminate the thread if asked so

void usleep (unsigned long usec, bool exitCheck = false)

### usleep

[static]

Sleep for a number of microseconds

Parameters:

usec | Number of microseconds to sleep, may be rounded to milliseconds on some platforms
exitCheck | Terminate the thread if asked so

unsigned long idleUsec ()

### idleUsec

[static]

Get the platform dependent idle sleep interval in microseconds

Returns: Number of microseconds each call to idle() will sleep

unsigned long idleMsec ()

### idleMsec

[static]

Get the platform dependent idle sleep interval in milliseconds

Returns: Number of milliseconds each call to idle() will sleep

void idleMsec (unsigned long msec)

### idleMsec

[static]

Set the idle sleep interval or reset to platform default

Parameters:

msec | Sleep interval in milliseconds, platform default if zero

Thread* current ()

### current

[static]

Get a pointer to the currently running thread

Returns: A pointer to the current thread or NULL for the main thread or threads created by other libraries

int count ()

### count

[static]

Get the number of Yate created threads

Returns: Count of current Thread objects

bool check (bool exitNow = true)

### check

[static]

Check if the current thread was asked to terminate.

Parameters:

exitNow | If thread is marked as cancelled then terminate immediately

Returns: False if thread should continue running, true if it should stop

void exit ()

### exit

[static]

Terminates the current thread.

void cancel (bool hard = false)

### cancel

Terminates the specified thread.

Parameters:

hard | Kill the thread the hard way rather than just setting an exit check marker

inline bool isCurrent ()

### isCurrent

[const]

Check if this thread is the currently running thread

Returns: True if this is the current thread

Priority priority (const char* name, Priority defvalue = Normal)

### priority

[static]

Convert a priority name to a thread priority level

Parameters:

name | Name of the requested level
defvalue | Priority to return in case of an invalid name

Returns: A thread priority level

const char* priority (Priority prio)

### priority

[static]

Convert a priority level to a textual name

Parameters:

prio | Priority level to convert

Returns: Name of the level or NULL if an invalid argument was provided

void killall ()

### killall

[static]

Kills all other running threads. Ouch! Must be called from the main thread or it does nothing.

void preExec ()

### preExec

[static]

On some platforms this method kills all other running threads. Must be called after fork() but before any exec*() call.

int lastError ()

### lastError

[static]

Get the last thread error

Returns: The value returned by GetLastError() (on Windows) or the value of C library 'errno' variable otherwise

inline bool errorString (String& buffer)

### errorString

[static]

Get the last thread error's string from system.

Parameters:

buffer | The destination string

Returns: True if an error string was retrieved. If false is returned, the buffer is filled with a generic string indicating an unknown error and its code

bool errorString (String& buffer, int code)

### errorString

[static]

Get an error string from system. On Windows the code parameter must be a code returned by GetLastError(). Otherwise, the error code should be a valid value for the C library 'errno' variable

Parameters:

buffer | The destination string
code | The error code

Returns: True if an error string was retrieved. If false is returned, the buffer is filled with a generic string indicating an unknown error and its code

Thread (const char *name = 0, Priority prio = Normal)

### Thread

[protected]

Creates and starts a new thread

Parameters:

name | Static name of the thread (for debugging purpose only)
prio | Thread priority

Thread (const char *name, const char* prio)

### Thread

[protected]

Creates and starts a new thread

Parameters:

name | Static name of the thread (for debugging purpose only)
prio | Thread priority level name

~Thread ()

### ~Thread

[protected virtual]

The destructor is called when the thread terminates

Generated by: paulc on bussard on Fri Dec 21 16:28:34 2012, using kdoc 2.0a54.