英語版
このページの英語版を見る

core.thread.osthread

osthreadモジュールは、スレッドの生成と管理のための低レベルでOS依存のコードを提供する を提供する。
License:
Distributed under the Boost Software License 1.0. (See accompanying file LICENSE)
Authors:
Sean Kelly, Walter Bright, Alex Rønne Petersen, Martin Nowak
class Thread: core.thread.threadbase.ThreadBase;
このクラスはD言語のすべてのスレッド機能をカプセル化する。 プログラミング言語のすべてのスレッド機能をカプセル化する。 スレッド操作は ガベージコレクションのために必要な機能であるため、すべてのユーザースレッドはこのクラスから派生すべきである。 このクラスのインスタンスを明示的に削除してはならない。 新しいスレッドは、次の例のように、派生または合成のいずれかを使って作成することができる。 次の例のようにである。
pure nothrow @nogc @safe this(void function() fn, size_t sz = 0);
静的な D関数に関連付けられたスレッド・オブジェクトを初期化する。
Parameters:
void function() fn スレッド関数。
size_t sz このスレッドのスタック・サイズ。

このスレッドの fnはNULLであってはならない。

pure nothrow @nogc @safe this(void delegate() dg, size_t sz = 0);
スレッド・オブジェクトを初期化する。 D関数に関連付けられたスレッド・オブジェクトを初期化する。
Parameters:
void delegate() dg スレッド関数。
size_t sz このスレッドのスタック・サイズ。

このスレッドの dgはNULLであってはならない。

static nothrow @nogc @safe Thread getThis();
呼び出しスレッドへの参照を提供する。
Returns:
呼び出しスレッドを表すスレッドオブジェクト。 このオブジェクトを削除した結果は未定義である。 このオブジェクトを削除した結果は未定義である。 現在のスレッドが ランタイムにアタッチされていない場合は、NULL参照が返される。
final nothrow Thread start();
スレッドを開始し、構築時に渡された関数またはデリゲートを呼び出す。 を呼び出す。

スレッドを起動し、構築時に渡された関数またはデリゲートを呼び出す。 このルーチンは、スレッドのインスタンスごとに1回だけ呼び出すことができる。

Throws:
スレッドの開始に失敗すると ThreadException が発生する。
final Throwable join(bool rethrow = true);
このスレッドの完了を待つ。 スレッドが 処理されない例外の結果としてスレッドが終了した場合、この例外は再投げされる。
Parameters:
bool rethrow このスレッドが終了する原因となった未処理の例外をすべて投げ直す。 を投げ直す。
Throws:
操作に失敗した場合はThreadException。 結合スレッドで処理されなかった例外。
Returns:
rethrow = falseの場合はこのスレッドで処理されない例外、そうでない場合はNULL それ以外の場合。
static pure nothrow @nogc @property @trusted int PRIORITY_MIN();
スレッドに設定できるスケジューリング優先度の最小値。 複数のスケジューリングポリシーが定義されている 複数のスケジューリングポリシーが定義されているシステムでは、この値は、スレッドに設定できる最小のスケジューリング優先度を表す。 のスケジューリングポリシーに有効な最小の優先度を表す。 優先度の最小値である。
static pure nothrow @nogc @property @trusted const(int) PRIORITY_MAX();
スレッドに設定可能なスケジューリング優先度の最大値。 複数のスケジューリングポリシーが定義されている 複数のスケジューリングポリシーが定義されているシステムでは、 この値はそのプロセスのスケジューリングポリシーに有効な最大の優先度を表す。 のスケジューリングポリシーに有効な最大の優先度を表す。 優先度の最大値である。
static pure nothrow @nogc @property @trusted int PRIORITY_DEFAULT();
スレッドに設定されるデフォルトのスケジューリング優先度。 複数のスケジューリングポリシーが定義されている 複数のスケジューリングポリシーが定義されているシステムでは、 この値はスレッドのスケジューリングポリシーのデフォルトの優先度を表す。 プロセスのスケジューリングポリシーのデフォルトの優先度を表す。 のデフォルトの優先度を表す。
final @property int priority();
関連するスレッドのスケジューリング優先度を取得する。

注釈: 終了したスレッドの優先度を取得する。 すでに終了したスレッドの優先度を取得すると の優先度を取得すると、デフォルトの優先度が返されることがある。

Returns:
このスレッドのスケジューリング優先度
final @property void priority(int val);
関連スレッドのスケジューリング優先度を設定する。

注釈: スレッドの優先度を設定する。 すでに終了したスレッドの優先度を設定しても の優先度を設定しても効果がない場合がある。

Parameters:
int val このスレッドの新しいスケジューリング優先度。
final nothrow @nogc @property bool isRunning();
このスレッドが実行中かどうかをテストする。
Returns:
スレッドが実行中であればtrueを、実行中でなければfalseを返す。
static nothrow @nogc @trusted void sleep(Duration val);
少なくとも指定された期間、呼び出し元のスレッドを一時停止する。 これは OSがサポートする最大スリープ時間より長い場合、複数のOSコールが発生する可能性がある。 を超える場合は、OSが複数回呼び出される可能性がある。
Parameters:
Duration val 呼び出し元スレッドが一時停止すべき最小継続時間。

この 期間は負であってはならない。

例:

Thread.sleep( dur!("msecs")( 50 ) );  // 50ミリ秒間スリープする
Thread.sleep( dur!("seconds")( 5 ) ); // 5秒間スリープする

static nothrow @nogc void yield();
呼び出し元のスレッドから強制的にコンテキストを切り替える。
nothrow @nogc void thread_setGCSignals(int suspendSignalNo, int resumeSignalNo);
スレッドモジュールが初期化されたときに、スレッドの中断と再開に SIGRTMIN と SIGRTMIN + 1 以外のシグナルを使うように指示する。 シグナルを使用するように指示する。 この関数は、thread_init()の前に、多くても1回だけ呼び出すべきである。 この関数はPosix専用である。
Thread thread_attachThis();
Dランタイムで使用するために、呼び出し元のスレッドを登録する。 このルーチンが が呼び出された場合、何も実行されない。

注釈: このルーチンは、呼び出されてもスレッドローカルの静的コンストラクタを実行しない。 Dスレッドとしての完全な機能が必要な場合、以下の関数が呼ばれなければならない。 を呼び出す必要がある:

extern (C) void rt_moduleTlsCtor();

alias getpid = core.sys.posix.unistd.getpid;
呼び出し元プロセスのプロセスIDを返す。 システム上で一意であることが保証されている。この呼び出しは常に成功する。

例:

writefln("Current process id: %s", getpid());

nothrow void thread_suspendAll();
世界を止める」ガベージコレクションの呼び出しスレッド以外のすべてのスレッドを一時停止する。 を実行する。 この関数は複数回呼び出すことができる。 処理を再開する前に、一致する回数のthread_resumeAllを呼び出さなければならない。 処理が再開される。
Throws:
実行中のスレッドでサスペンド操作が失敗した場合は ThreadError となる。
nothrow @nogc void thread_init();
スレッド・モジュールを初期化する。 この関数は、ガベージコレクタが起動時に、他のスレッドルーチンの前に呼び出さなければならない。 この関数はガベージコレクタによって起動時に、そして他のスレッドルーチンが呼び出される前に呼び出されなければならない が呼び出される前に、ガベージコレクタによって呼び出されなければならない。
nothrow @nogc void thread_term();
スレッド・モジュールを終了する。その後、他のスレッド・ルーチンを呼んではならない。 を呼び出すことはできない。
nothrow @nogc ThreadID createLowLevelThread(void delegate() nothrow dg, uint stacksize = 0, void delegate() nothrow cbDllUnload = null);
ランタイムの制御下にないスレッドを作成する。 ランタイムの制御下にないスレッドを作成する。
Parameters:
void delegate() nothrow dg 作成されたスレッドで実行するデリゲート。
uint stacksize 作成されたスレッドのスタックのサイズ。デフォルトの0は プラットフォーム固有のデフォルト・サイズが選択される。
void delegate() nothrow cbDllUnload Windowsのみ:動的にロードされるDLLで実行されている場合、このデリゲートは、DLLがアンロードされるはずなのにスレッドがまだ実行されている場合に呼び出される DLLがアンロードされるはずなのにスレッドがまだ実行されている場合、このデリゲートが呼び出される。 スレッドは、コールバックによってjoinLowLevelThread
Returns:
新しいスレッドのプラットフォーム固有のスレッドID。エラーが発生した場合はThreadID.init が返される。
nothrow @nogc void joinLowLevelThread(ThreadID tid);
createLowLevelThread で作成されたスレッドが終了するのを待つ。

注釈:Windows DLLでは、この関数がDllMain経由でDllMainと一緒に呼び出された場合、スレッドIDが返される。 Windows DLLでは、この関数がDllMain経由で引数DLL_PROCESS_DETACHで呼ばれると、スレッドは強制終了される。 引数DLL_PROCESS_DETACHでDllMain経由でこの関数が呼ばれた場合、スレッドは強制終了される。 そうしないとデッドロックが発生するためである。

Parameters:
ThreadID tid createLowLevelThread によって返されるスレッドID。