# Poco

# class Thread

Library: Foundation
Package: Threading
Header: Poco/Thread.h

## Description

This class implements a platform-independent wrapper to an operating system thread.

Every Thread object gets a unique (within its process) numeric thread ID. Furthermore, a thread can be assigned a name. The name of a thread can be changed at any time.

## Inheritance

Direct Base Classes: ThreadImpl

All Base Classes: ThreadImpl

## Member Summary

Member Functions: clearTLS, current, currentTid, getMaxOSPriority, getMinOSPriority, getName, getOSPriority, getPriority, getStackSize, id, isRunning, join, makeName, name, setName, setOSPriority, setPriority, setStackSize, sleep, start, tid, tls, tryJoin, uniqueId, yield

## Types

### TID

typedef ThreadImpl::TIDImpl TID;

## Enumerations

### Policy

POLICY_DEFAULT = POLICY_DEFAULT_IMPL

### Priority

Thread priorities.

PRIO_LOWEST = PRIO_LOWEST_IMPL

The lowest thread priority.

PRIO_LOW = PRIO_LOW_IMPL

A lower than normal thread priority.

PRIO_NORMAL = PRIO_NORMAL_IMPL

The normal thread priority.

PRIO_HIGH = PRIO_HIGH_IMPL

A higher than normal thread priority.

PRIO_HIGHEST = PRIO_HIGHEST_IMPL

The highest thread priority.

## Constructors

### Thread

Thread();

Creates a thread. Call start() to start it.

### Thread

Thread(
const std::string & name
);

Creates a named thread. Call start() to start it.

## Destructor

### ~Thread

~Thread();

Destroys the thread.

## Member Functions

### current

static Thread * current();

Returns the Thread object for the currently active thread. If the current thread is the main thread, 0 is returned.

### currentTid

static TID currentTid();

Returns the native thread ID for the current thread.

### getMaxOSPriority

static int getMaxOSPriority(
int policy = POLICY_DEFAULT
);

Returns the maximum operating system-specific priority value, which can be passed to setOSPriority() for the given policy.

### getMinOSPriority

static int getMinOSPriority(
int policy = POLICY_DEFAULT
);

Returns the mininum operating system-specific priority value, which can be passed to setOSPriority() for the given policy.

### getName

std::string getName() const;

Returns the name of the thread.

### getOSPriority

int getOSPriority() const;

Returns the thread's priority, expressed as an operating system specific priority value.

May return 0 if the priority has not been explicitly set.

### getPriority

Priority getPriority() const;

Returns the thread's priority.

### getStackSize

int getStackSize() const;

Returns the thread's stack size in bytes. If the default stack size is used, 0 is returned.

### id

int id() const;

Returns the unique thread ID of the thread.

### isRunning

bool isRunning() const;

Returns true if the thread is running.

### join

void join();

Waits until the thread completes execution. If multiple threads try to join the same thread, the result is undefined.

### join

void join(
long milliseconds
);

Waits for at most the given interval for the thread to complete. Throws a TimeoutException if the thread does not complete within the specified time interval.

### name

std::string name() const;

Returns the name of the thread.

### setName

void setName(
const std::string & name
);

Sets the name of the thread.

### setOSPriority

void setOSPriority(
int prio,
int policy = POLICY_DEFAULT
);

Sets the thread's priority, using an operating system specific priority value. Use getMinOSPriority() and getMaxOSPriority() to obtain mininum and maximum priority values. Additionally, a scheduling policy can be specified. The policy is currently only used on POSIX platforms where the values SCHED_OTHER (default), SCHED_FIFO and SCHED_RR are supported.

### setPriority

void setPriority(
Priority prio
);

Sets the thread's priority.

Some platform only allow changing a thread's priority if the process has certain privileges.

### setStackSize

void setStackSize(
int size
);

Sets the thread's stack size in bytes. Setting the stack size to 0 will use the default stack size. Typically, the real stack size is rounded up to the nearest page size multiple.

### sleep

static void sleep(
long milliseconds
);

Suspends the current thread for the specified amount of time.

### start

void start(
Runnable & target
);

Starts the thread with the given target.

Note that the given Runnable object must be valid during the entire lifetime of the thread, as only a reference to it is stored internally.

### start

void start(
Callable target,
void * pData = 0
);

Starts the thread with the given target and parameter.

### tid

TID tid() const;

Returns the native thread ID of the thread.

### tryJoin

bool tryJoin(
long milliseconds
);

Waits for at most the given interval for the thread to complete. Returns true if the thread has finished, false otherwise.

### yield

static void yield();

Yields cpu to other threads.

### clearTLS

void clearTLS();

Clears the thread's local storage.

### makeName

std::string makeName();

Creates a unique name for a thread.

### tls

ThreadLocalStorage & tls();

Returns a reference to the thread's local storage.

### uniqueId

static int uniqueId();

Creates and returns a unique id for a thread.

## Variables

### ThreadImpl::Callable

using ThreadImpl::Callable;