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