std::jthread::joinable
[[nodiscard]] bool joinable() const noexcept; | (since C++20) |
Проверяет, идентифицирует ли объект std::jthread активную нить выполнения. В частности, возвращает true, если get_id() != std::jthread::id(). Таким образом, jthread, созданный по умолчанию, не является присоединяемым.
Нить, которая завершила выполнение кода, но ещё не была присоединена, всё ещё считается активной нитью выполнения и, следовательно, присоединяемой.
Параметры
(нет)
Возвращаемое значение
true если объект 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:2023):
- 33.4.4.3 Члены [thread.jthread.mem]
- Стандарт C++20 (ISO/IEC 14882:2020):
- 32.4.3.2 Члены [thread.jthread.mem]
См. также
| возвращает id потока (общедоступная функция-член) |
|
| ожидает завершения выполнения потока (общедоступная функция-член) |
|
| разрешает потоку выполняться независимо от дескриптора потока (общедоступная функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/thread/jthread/joinable