Movatterモバイル変換


[0]ホーム

URL:


D Logo
Menu
Search

Library Reference

version 2.112.0

overview

Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.Requires a signed-in GitHub account. This works well for small changes.If you'd like to make larger changes you may want to consider usinga local clone.

core.thread.threadbase

The threadbase module provides OS-independent code for thread storage and management.
License:
Distributed under theBoost Software License 1.0. (See accompanying file LICENSE)
Authors:
Sean Kelly, Walter Bright, Alex Rønne Petersen, Martin Nowak

Sourcecore/thread/threadbase.d

classThreadException:object.Exception;
Base class for thread exceptions.
classThreadError:object.Error;
Base class for thread errors to be used for function inside GC when allocations are unavailable.
abstract classThreadBase;
pure nothrow @nogc @safe this(void function()fn, size_tsz = 0);
package nothrow @nogc booldestructBeforeDtor();
Cleans up any remaining resources used by this object.
abstract Throwablejoin(boolrethrow = true);
Waits for this thread to complete. If the thread terminated as the result of an unhandled exception, this exception will be rethrown.
Parameters:
boolrethrowRethrow any unhandled exception which may have caused this thread to terminate.
Throws:
ThreadException if the operation fails. Any exception not handled by the joined thread.
Returns:
Any exception not handled by this thread if rethrow = false, null otherwise.
final @nogc @property @safe ThreadIDid();
Gets the OS identifier for this thread.
Returns:
If the thread hasn't been started yet, returnsThreadID.init. Otherwise, returns the result ofGetCurrentThreadId on Windows, andpthread_self on POSIX.
The value is unique for the current process.
final @nogc @property @safe stringname();
Gets the user-readable label for this thread.
Returns:
The name of this thread.
final @nogc @property @safe voidname(stringval);
Sets the user-readable label for this thread.
Parameters:
stringvalThe new name of this thread.
final @nogc @property @safe boolisDaemon();
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.
Returns:
true if this is a daemon thread.
final @nogc @property @safe voidisDaemon(boolval);
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.
Parameters:
boolvalThe new daemon status for this thread.
final nothrow @nogc @property boolisMainThread();
Tests whether this thread is the main thread, i.e. the thread that initialized the runtime
Returns:
true if the thread is the main thread
nothrow @nogc @property boolisRunning();
Tests whether this thread is running.
Returns:
true if the thread is running, false if not.
static nothrow @nogc @safe ThreadBasegetThis();
Provides a reference to the calling thread.
Returns:
The thread object representing the calling thread. The result of deleting this object is undefined. If the current thread is not attached to the runtime, a null reference is returned.
static ThreadBase[]getAll();
Provides a list of all threads currently being tracked by the system. Note that threads in the returned array might no longer run (seeThreadBase.isRunning).
Returns:
An array containing references to all threads currently being tracked by the system. The result of deleting any contained objects is undefined.
static intopApply(scope int delegate(ref ThreadBase)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 (seeThreadBase.isRunning).
Parameters:
int delegate(ref ThreadBase)dgThe supplied code as a delegate.
Returns:
Zero if all elemented are visited, nonzero if not.
package pure nothrow @nogc @safe this(size_tsz = 0);
package static nothrow @nogc voidsetThis(ThreadBaset);
package(core.thread) final nothrow @nogc voidpushContext(StackContext*c);
abstract nothrow @nogc void[]savedRegisters();
Get an array of the current saved registers for this thread.
Returns:
A slice of the array representing all saved registers or null.
package(core.thread) static nothrow @nogc @property Mutexslock();
package(core.thread) static nothrow @nogc voidadd(StackContext*c);
package static nothrow @nogc voidincrementAboutToStart(ThreadBaset);
nothrow @nogc voidthread_term_tpl(ThreadT, MainThreadStore)(ref MainThreadStore_mainThreadStore);
Terminates the thread module. No other thread routine may be called afterwards.
nothrow @nogc boolthread_isMainThread();
ThreadTthread_attachThis_tpl(ThreadT)();
Registers the calling thread for use with the D Runtime. If this routine is called for a thread which is already registered, no action is performed.

NOTEThis routine does not run thread-local static constructors when called. If full functionality as a D thread is desired, the following function must be called after thread_attachThis:

extern (C) void rt_moduleTlsCtor();

nothrow @nogc voidthread_detachThis();
Deregisters the calling thread from use with the runtime. If this routine is called for a thread which is not registered, the result is undefined.

NOTEThis routine does not run thread-local static destructors when called. If full functionality as a D thread is desired, the following function must be called before thread_detachThis, particularly if the thread is being detached at some indeterminate time before program termination:

extern(C) void rt_moduleTlsDtor();

See Also:
voidthread_detachByAddr(ThreadIDaddr);

nothrow @nogc voidthread_detachInstance(ThreadBaset);
Deregisters the given thread from use with the runtime. If this routine is called for a thread which is not registered, the result is undefined.

NOTEThis routine does not run thread-local static destructors when called. If full functionality as a D thread is desired, the following function must be called by the detached thread, particularly if the thread is being detached at some indeterminate time before program termination:

extern(C) void rt_moduleTlsDtor();

static ThreadBasethread_findByAddr(ThreadIDaddr);
Search the list of all threads for a thread with the given thread identifier.
Parameters:
ThreadIDaddrThe thread identifier to search for.
Returns:
The thread object associated with the thread identifier, null if not found.
nothrow @nogc voidthread_setThis(ThreadBaset);
Sets the current thread to a specific reference. Only to be used when dealing with externally-created threads (in e.g. C code). The primary use of this function is when ThreadBase.getThis() must return a sensible value in, for example, TLS destructors. In other words, don't touch this unless you know what you're doing.
Parameters:
ThreadBasetA reference to the current thread. May be null.
voidthread_joinAll();
Joins all non-daemon threads that are currently running. This is done by performing successive scans through the thread list until a scan consists of only daemon threads.
nothrow voidthread_postRestartTheWorld();
Run the necessary operation required after the world was resumed.
nothrow voidthread_resumeAll();
Resume all threads but the calling thread for "stop the world" garbage collection runs. This function must be called once for each preceding call to thread_suspendAll before the threads are actually resumed.

InThis routine must be preceded by a call to thread_suspendAll.

Throws:
ThreadError if the resume operation fails for a running thread.
enumScanType: int;
Indicates the kind of scan being performed bythread_scanAllType.
stack
The stack and/or registers are being scanned.
tls
TLS data is being scanned.
aliasScanAllThreadsFn = void delegate(void*, void*) nothrow;

aliasScanAllThreadsTypeFn = void delegate(ScanType, void*, void*) nothrow;
The scanning function.
nothrow voidthread_scanAllType(scope ScanAllThreadsTypeFnscan);
The main entry point for garbage collection. The supplied delegate will be passed ranges representing both stack and register values.
Parameters:
ScanAllThreadsTypeFnscanThe scanner function. It should scan from p1 through p2 - 1.

InThis routine must be preceded by a call to thread_suspendAll.

nothrow voidthread_scanAll(scope ScanAllThreadsFnscan);
The main entry point for garbage collection. The supplied delegate will be passed ranges representing both stack and register values.
Parameters:
ScanAllThreadsFnscanThe scanner function. It should scan from p1 through p2 - 1.

InThis routine must be preceded by a call to thread_suspendAll.

package nothrow @nogc voidonThreadError(stringmsg);
A callback for thread errors in D during collections. Since an allocation is not possible a preallocated ThreadError will be used as the Error instance
Returns:
never returns
Throws:
ThreadError.
nothrow @nogc void*thread_stackTop();
Returns the stack top of the currently active stack within the calling thread.

InThe calling thread must be attached to the runtime.

Returns:
The address of the stack top.
nothrow @nogc void*thread_stackBottom();
Returns the stack bottom of the currently active stack within the calling thread.

InThe calling thread must be attached to the runtime.

Returns:
The address of the stack bottom.
package size_tll_nThreads;
package ll_ThreadData*ll_pThreads;
package void[mutexClassInstanceSize]ll_lock;
package nothrow @nogc @property MutexlowlevelLock();
package nothrow @nogc voidinitLowlevelThreads();
package nothrow @nogc voidtermLowlevelThreads();
package nothrow @nogc voidll_removeThread(ThreadIDtid);
nothrow @nogc boolfindLowLevelThread(ThreadIDtid);
Check whether a thread was created bycreateLowLevelThread.
Parameters:
ThreadIDtidthe platform specific thread ID.
Returns:
true if the thread was created bycreateLowLevelThread and is still running.
Copyright © 1999-2026 by theD Language Foundation | Page generated byDdoc on Fri Feb 20 17:58:18 2026

[8]ページ先頭

©2009-2026 Movatter.jp