std::jthread::joinable
bool joinable() const noexcept; | (начиная с C++20) |
Проверяет, идентифицирует ли объект std::jthread активный поток выполнения. В частности, возвращает true, если get_id() != std::jthread::id(). Поэтому объект jthread, созданный конструктором по умолчанию, не является присоединяемым.
Поток, завершивший выполнение кода, но ещё не присоединённый, по-прежнему считается активным потоком выполнения и, следовательно, является присоединяемым.
Параметры
(нет)
Возвращаемое значение
true, если объект std::jthread идентифицирует активный поток выполнения, и false в противном случае.
Пример
#include <chrono>
#include <iostream>
#include <thread>
using namespace std::chrono_literals;
void foo()
{
std::this_thread::sleep_for(500ms);
}
int main()
{
std::cout << std::boolalpha;
std::jthread t;
std::cout << "before starting, joinable: " << t.joinable() << '\n';
t = std::jthread{foo};
std::cout << "after starting, joinable: " << t.joinable() << '\n';
t.join();
std::cout << "after joining, joinable: " << t.joinable() << '\n';
t = std::jthread{foo};
t.detach();
std::cout << "after detaching, joinable: " << t.joinable() << '\n';
}
Вывод:
before starting, joinable: false after starting, joinable: true after joining, joinable: false after detaching, joinable: false
Ссылки
- Стандарт C++23 (ISO/IEC 14882:2024):
- 33.4.4.3 Члены [thread.jthread.mem]
- Стандарт C++20 (ISO/IEC 14882:2020):
- 32.4.3.2 Члены [thread.jthread.mem]
См. также
| возвращает идентификатор потока (открытая функция-член) |
|
| ожидает завершения потока (открытая функция-член) |
|
| позволяет потоку выполняться независимо от дескриптора потока (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/thread/jthread/joinable