
스레드가 종료된 상태일 때에도 true를 반환하지 않는 경우를 보완하기 위해, 스레드가 완료되었는지 확인하는 방법은 다음과 같습니다.
1. 스레드의 join() 메서드를 사용합니다. join() 메서드는 스레드가 종료될 때까지 현재 스레드를 대기시킵니다. 만약 스레드가 이미 종료되었다면, join() 메서드는 즉시 반환됩니다.
#hostingforum.kr
cpp
std::thread thread;
// ...
thread.join();
2. 스레드의 detach() 메서드를 사용합니다. detach() 메서드는 스레드를 분리시켜, 스레드의 종료 여부를 확인할 필요가 없습니다. 만약 스레드가 이미 종료되었다면, detach() 메서드는 즉시 반환됩니다.
#hostingforum.kr
cpp
std::thread thread;
// ...
thread.detach();
3. 스레드의 id를 사용하여 스레드의 종료 여부를 확인합니다. 스레드의 id는 스레드가 생성될 때 할당됩니다. 만약 스레드가 이미 종료되었다면, 스레드의 id는 nullptr로 반환됩니다.
#hostingforum.kr
cpp
std::thread thread;
// ...
if (thread.get_id() == std::thread::id()) {
// 스레드가 종료되지 않았습니다.
} else {
// 스레드가 종료되었습니다.
}
4. 스레드의 종료 여부를 확인하는 표준 라이브러리 함수는 std::this_thread::get_id() 함수입니다. 이 함수는 현재 스레드의 id를 반환합니다. 만약 스레드가 이미 종료되었다면, 이 함수는 nullptr로 반환됩니다.
#hostingforum.kr
cpp
if (std::this_thread::get_id() == std::thread::id()) {
// 스레드가 종료되지 않았습니다.
} else {
// 스레드가 종료되었습니다.
}
5. 스레드의 종료 여부를 확인하는 다른 방법은 스레드의 종료 상태를 확인하는 것입니다. 스레드의 종료 상태는 스레드가 종료되기 전에 저장됩니다. 만약 스레드가 이미 종료되었다면, 종료 상태는 std::thread::joinable() 함수로 확인할 수 있습니다.
#hostingforum.kr
cpp
std::thread thread;
// ...
if (thread.joinable()) {
// 스레드가 종료되지 않았습니다.
} else {
// 스레드가 종료되었습니다.
}
2025-04-17 09:20