Поделиться через


Класс thread

Определяет объект, который позволяет наблюдать за потоком выполнения в приложении и управлять этим потоком.

Синтаксис

class thread;

Замечания

Объект thread можно использовать для наблюдения за потоком выполнения в приложении и управления этим потоком. Объект thread , созданный с помощью конструктора по умолчанию, не связан с потоком выполнения. Объект thread , созданный с помощью вызываемого объекта, создает новый поток выполнения и вызывает вызываемый объект в этом thread. Thread объекты можно перемещать, но не копировать, поэтому поток выполнения может быть связан только с одним 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.

Если поток, связанный с вызывающим объектом, не является присоединенным, функция выдает system_error код invalid_argumentошибки.

Если поток, связанный с вызывающим объектом, недопустим, функция создает system_error код no_such_processошибки.

get_id

Возвращает уникальный идентификатор связанного потока.

id get_id() const noexcept;

Возвращаемое значение

Объект id , который однозначно идентифицирует связанный поток или id() если поток не связан с объектом.

hardware_concurrency

Статический метод, который возвращает приблизительное число контекстов аппаратного потока.

static unsigned int hardware_concurrency() noexcept;

Возвращаемое значение

Приблизительное число контекстов аппаратного потока. Если значение не может быть вычислено или неправильно определено, этот метод возвращает значение 0.

Только для систем Майкрософт

hardware_concurrency возвращает количество логических процессоров, соответствующее количеству аппаратных потоков, которые могут выполняться одновременно. Он учитывает количество физических процессоров, количество ядер в каждом физическом процессоре и одновременное многопоточность на каждом отдельном ядре.

До Windows 11 и Windows Server 2022 приложения по умолчанию были ограничены одной группой процессоров, имея не более 64 логических процессоров. Это ограничивает число одновременных выполнения потоков до 64. Дополнительные сведения см. в разделе "Группы обработчиков".

Начиная с Windows 11 и Windows Server 2022, процессы и их потоки имеют сходство процессоров, которые по умолчанию охватывают все процессоры в системе и между несколькими группами на компьютерах с более чем 64 процессорами. Ограничение числа параллельных потоков теперь составляет общее количество логических процессоров в системе.

Класс 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 определяется как приведение Win32 HANDLE как void *.

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().

Второй конструктор создает объект, связанный с новым потоком выполнения. Он выполняет псевдофукционную функцию INVOKE , определенную в <functional>. Если недостаточно ресурсов для запуска нового потока, функция создает system_error объект с кодом resource_unavailable_try_againошибки. Если вызов завершается F с неухваченным исключением, terminate вызывается. Вызов F не должен привести к преждевременному выходу потока, например путем вызова ExitThread или _endthreadex.

Третий конструктор создает объект, связанный с потоком, который, в свою очередь, связан с Other. Other затем присваивается состояние, созданное по умолчанию.

См. также

Справочник по файлам заголовков
<thread>