次の方法で共有


thread クラス

アプリケーション内の実行スレッドを観察および管理するために使用するオブジェクトを定義します。

構文

class thread;

解説

アプリケーション内の実行スレッドを観察および管理するために thread オブジェクトを使用できます。 既定のコンストラクターを使用して作成された thread オブジェクトは、実行スレッドに関連付けられていません。 呼び出し可能オブジェクトを使用して構築された thread オブジェクトは、新しい実行スレッドを作成し、その thread で呼び出し可能オブジェクトを呼び出します。 Thread オブジェクトは移動できますが、コピーすることはできません。そのため、1 つの実行スレッドを 1 つの thread オブジェクトにのみ関連付けることができます。

すべての実行スレッドに thread::id 型の一意の識別子があります。 関数 this_thread::get_id は呼び出しスレッドの識別子を返します。 メンバー関数 thread::get_id は、thread オブジェクトによって管理されるスレッドの識別子を返します。 既定で構築される thread オブジェクトの場合、thread::get_id メソッドは、呼び出し時に結合できる実行スレッドに対して、既定で構築される thread オブジェクトすべてで同じで、this_thread::get_id によって返される値とは異なる値を持つオブジェクトを返します。

メンバー

パブリック クラス

名前 説明
id 関連するスレッドを一意に識別します。

パブリック コンストラクター

名前 説明
thread thread オブジェクトを構築します。

パブリック メソッド

名前 説明
detach thread オブジェクトから関連するスレッドをデタッチします。
get_id 関連付けられたスレッドの一意の識別子を返します。
hardware_concurrency 静的。 ハードウェア スレッド コンテキストの数の見積もりを返します。
join 関連のスレッドが完了するまでブロックします。
joinable 関連付けられたスレッドが結合可能かどうかを指定します。
native_handle スレッド ハンドルを表す実装固有の型を返します。
swap オブジェクトの状態を指定した thread オブジェクトと交換します。

パブリック演算子

名前 説明
thread::operator= スレッドを現在の thread オブジェクトと関連付けます。

必要条件

ヘッダー:<thread>

名前空間std:

detach

関連するスレッドをデタッチします。 オペレーティング システムは、終了時にスレッド リソースを解放することが必要になります。

void detach();

解説

detach を呼び出した後、後続の get_id 呼び出しによって id が返されます。

呼び出し元のオブジェクトに関連付けられているスレッドが結合可能でない場合、関数は、エラー コード invalid_argumentsystem_error をスローします。

呼び出し元のオブジェクトに関連付けられているスレッドが無効な場合、関数は、エラー コード no_such_processsystem_error をスローします。

get_id

関連付けられたスレッドの一意の識別子を返します。

id get_id() const noexcept;

戻り値

関連付けられたスレッドを一意に識別する id オブジェクト、またはオブジェクトに関連付けられているスレッドがない場合は id()

hardware_concurrency

ハードウェア スレッド コンテキストの数の見積もりを返す静的メソッド。

static unsigned int hardware_concurrency() noexcept;

戻り値

ハードウェア スレッド コンテキストの数の見積もり。 値を計算できない場合、または適切に定義されていない場合、このメソッドは 0 を返します。

Microsoft 固有の仕様

hardware_concurrency は現在、論理プロセッサの数を返すように定義されています。これは、同時に実行できるハードウェア スレッドの数に対応します。 この計算には、物理プロセッサの数、各物理プロセッサのコア数、各シングル コアでの同時マルチスレッドが含まれます。

ただし、論理プロセッサが 64 を超えるシステムでは、この数は 1 つのグループ内の論理プロセッサの数が上限になります。「プロセッサ グループ」を参照してください。

id クラス

プロセス内の各実行スレッドの一意の識別子を提供します。

class thread::id {
    id() noexcept;
};

解説

既定のコンストラクターは、既存のスレッドのオブジェクトについて、thread::id オブジェクトに等しいオブジェクトを作成しません。

既定で構築される thread::id オブジェクトは等しいものになります。

join

呼び出し元のオブジェクトに関連付けられている実行スレッドが完了するまでブロックします。

void join();

解説

呼び出しが成功すると、呼び出し元のオブジェクトの後続の get_id 呼び出しは、既存のどのスレッドの thread::id にも等しくない既定の thread::id を返します。呼び出しが成功しなかった場合、get_id によって返される値は変更されません。

joinable

関連付けられたスレッドが結合可能かどうかを指定します。

bool joinable() const noexcept;

戻り値

関連付けられたスレッドが結合可能な場合は true、それ以外の場合は false

解説

スレッド オブジェクトは、次の場合 get_id() != id()に結合できます。

native_handle

スレッド ハンドルを表す実装固有の型を返します。 スレッド ハンドルは、実装固有の方法で使用できます。

native_handle_type native_handle();

戻り値

native_handle_type は、void * としてキャストされる Win32 HANDLE と定義されます。

thread::operator=

指定したオブジェクトのスレッドを現在のオブジェクトに関連付けます。

thread& operator=(thread&& Other) noexcept;

パラメーター

Other
thread オブジェクト。

戻り値

*this

解説

メソッドは、呼び出し元のオブジェクトが結合可能である場合、デタッチを呼び出します。

関連付けが行われると、Other が既定で構築される状態に設定されます。

swap

オブジェクトの状態を、指定された thread オブジェクトの状態と交換します。

void swap(thread& Other) noexcept;

パラメーター

Other
thread オブジェクト。

thread コンストラクター

thread オブジェクトを構築します。

thread() noexcept;
template <class Fn, class... Args>
explicit thread(Fn&& F, Args&&... A);

thread(thread&& Other) noexcept;

パラメーター

F
スレッドによって実行されるアプリケーション定義関数。

A
F に渡す引数のリスト。

Other
既存の thread オブジェクトです。

解説

最初のコンストラクターは、実行スレッドに関連付けられていないオブジェクトを構築します。 構築されたオブジェクトの get_id への呼び出しによって返される値は thread::id() です。

2 番目のコンストラクターは、新しい実行スレッドに関連付けられているオブジェクトを構築し、<functional> で定義されている擬似関数 INVOKE を実行します。 新しいスレッドを開始するのに十分なリソースがない場合、この関数は、エラー コード resource_unavailable_try_againsystem_error オブジェクトをスローします。 F への呼び出しが、キャッチされない例外で終了する場合、terminate が呼び出されます。

3 番目のコンストラクターは、Other に関連付けられているスレッドに関連付けられているオブジェクトを構築します。 Other は既定で構築される状態に設定されます。

関連項目

ヘッダー ファイル リファレンス
<thread>