Thread

This class encapsulates all threading functionality for the D programming language. As thread manipulation is a required facility for garbage collection, all user threads should derive from this class, and instances of this class should never be explicitly deleted. A new thread may be created using either derivation or composition, as in the following example.

Constructors

this
this(void function() fn, size_t sz = 0)

Initializes a thread object which is associated with a static D function.

this
this(void delegate() dg, size_t sz = 0)

Initializes a thread object which is associated with a dynamic D function.

Destructor

~this
~this()

Cleans up any remaining resources used by this object.

Members

Functions

join
Throwable join(bool rethrow = true)

Waits for this thread to complete. If the thread terminated as the result of an unhandled exception, this exception will be rethrown.

start
Thread start()

Starts the thread and invokes the function or delegate passed upon construction.

Properties

PRIORITY_DEFAULT
int PRIORITY_DEFAULT [@property getter]

The default scheduling priority that is set for a thread. On systems where multiple scheduling policies are defined, this value represents the default priority for the scheduling policy of the process.

PRIORITY_MAX
const(int) PRIORITY_MAX [@property getter]

The maximum scheduling priority that may be set for a thread. On systems where multiple scheduling policies are defined, this value represents the maximum valid priority for the scheduling policy of the process.

PRIORITY_MIN
int PRIORITY_MIN [@property getter]

////////////////////////////////////////////////////////////////////////

PRIORITY_MIN
int PRIORITY_MIN [@property getter]

The minimum scheduling priority that may be set for a thread. On systems where multiple scheduling policies are defined, this value represents the minimum valid priority for the scheduling policy of the process.

id
ThreadID id [@property getter]

Gets the OS identifier for this thread.

isDaemon
bool isDaemon [@property getter]

Gets the daemon status for this thread. While the runtime will wait for all normal threads to complete before tearing down the process, daemon threads are effectively ignored and thus will not prevent the process from terminating. In effect, daemon threads will be terminated automatically by the OS when the process exits.

isDaemon
bool isDaemon [@property setter]

Sets the daemon status for this thread. While the runtime will wait for all normal threads to complete before tearing down the process, daemon threads are effectively ignored and thus will not prevent the process from terminating. In effect, daemon threads will be terminated automatically by the OS when the process exits.

isRunning
bool isRunning [@property getter]

Tests whether this thread is running.

name
string name [@property getter]

Gets the user-readable label for this thread.

name
string name [@property setter]

Sets the user-readable label for this thread.

priority
int priority [@property getter]

Gets the scheduling priority for the associated thread.

priority
int priority [@property setter]

Sets the scheduling priority for the associated thread.

Static functions

getAll
Thread[] getAll()

Provides a list of all threads currently being tracked by the system. Note that threads in the returned array might no longer run (see Thread..isRunning).

getThis
Thread getThis()

Provides a reference to the calling thread.

opApply
int opApply(scope int delegate(ref Thread) dg)

Operates on all threads currently being tracked by the system. The result of deleting any Thread object is undefined. Note that threads passed to the callback might no longer run (see Thread..isRunning).

sleep
void sleep(Duration val)

Suspends the calling thread for at least the supplied period. This may result in multiple OS calls if period is greater than the maximum sleep duration supported by the operating system.

yield
void yield()

Forces a context switch to occur away from the calling thread.

Examples

1 class DerivedThread : Thread
2 {
3     this()
4     {
5         super(&run);
6     }
7 
8 private:
9     void run()
10     {
11         // Derived thread running.
12     }
13 }
14 
15 void threadFunc()
16 {
17     // Composed thread running.
18 }
19 
20 // create and start instances of each type
21 auto derived = new DerivedThread().start();
22 auto composed = new Thread(&threadFunc).start();
23 new Thread({
24     // Codes to run in the newly created thread.
25 }).start();
Suggestion Box / Bug Report