728x90
그 동안 std::thread를 사용한 예제를 보면 다음과 같다
void ThreadWork()
{
while(true)
{
// work...
}
};
int main()
{
std::thread t(ThreadWork);
// 쓰레드가 종료되길 기다려줘야 한다.
if (t.joinable())
{
t.join();
}
}
이번에 jthread는 쉽게 말하면 소멸자에서 join을 해준다. 즉 위의 코드를 아래와 같이 변경할 수 있다.
void ThreadWork()
{
while(true)
{
// work...
}
};
int main()
{
std::jthread t(ThreadWork);
}
하지만 위의 코드들은 thread가 종료되지 않는다. 종료되는 코드를 추가하면 다음과 같다.
bool gRunning =true;
void ThreadWork()
{
while(gRunning)
{
// work...
}
};
int main()
{
std::thread t(ThreadWork);
// 쓰레드 종료 요청
gRunning = false;
// 쓰레드가 종료되길 기다려줘야 한다.
if (t.joinable())
{
t.join();
}
}
jthread를 이용하면 조금 더 우아하게 종료할 수 있게 된다.
void ThreadWork(std::stop_token stopToken)
{
while(true)
{
if (stopToken.stop_requested())
break;
}
};
int main()
{
std::jthread t(ThreadWork);
t.request_stop();
}
그 동안 사용했던 std::thread를 좀 더 관리하기 쉬워질 것 같다.
728x90
'Basic Programming > C++ 20' 카테고리의 다른 글
C++20 - 그 외 함수들... (0) | 2024.01.21 |
---|---|
C++20 - format (0) | 2024.01.20 |
C++20 - Time Zone (0) | 2024.01.20 |
C++20 - Calendar (0) | 2024.01.17 |
C++20 - 비트연산 (0) | 2024.01.17 |