원칙적으로 이미 실행되어 .join() 되거나, .detach() 된 std::thread 를 멈추는것은 매우 힘들어 보인다 (std::async 포함)
우회적으로 pthread 라는 녀석을 이용해서 이미 실행된 thread 를 도중에 취소할 수 있겠지만,
pthread 라는 녀석은 C++ 17 / 20 버전 기준으로 해서 표준도 아닐뿐더러
추가적인 라이브러리를 설치해야 사용할 수 있는 녀석인듯 하다.
OS 단과 가까운 windows 코드일 것이라 추측한다.
C++ 표준 사용을 지양하는 나로서는 상당히 불쾌한 일이었다.
그래서 방법을 조금 생각 해 봤는데,
무식하게 긴 코드형태의 thread 를 중간에 멈추는 방법은 pthread 말곤 없을 것이다.
하지만, while(true) 형태로 매우 빠른 반복문을 수행하는 녀석이면.
조금 퍼포먼스를 희생하더라도
루프문에서 if문은 하나하나가 치명적일 수 있다.
isLoop 라는 변수를 참조형으로 받아서 간단히 처리하면 된다.
여기서 isLoop 변수가 main 에서 실행된것이 아니라면 동적할당으로 안전하게 관리할 필요성이 있다.
포인터와 레퍼런스 연산자 중 선호하는것을 사용하면 된다.
단,
람다식 캡쳐절에서 똑같이 레퍼런스 연산자 (&) 기호를 사용해 주어야 한다.
그러지 않으면 복사 처리가 되어 주솟값이 달라진다.
참고로 위 Thread 에서 레퍼런스로 가르키는 func, isLoop 가 nullptr 이 된다면
프로세스가 강제로 종료될 위험성이 있다.
'Programming > C++' 카테고리의 다른 글
C# C++ 간 이벤트 발생시키기. (0) | 2022.06.03 |
---|---|
[C++] Char * vs Char [] (0) | 2021.11.25 |
[C++] std::thread vs std::async (0) | 2021.09.17 |
[C++] 동적 라이브러리 vs 정적 라이브러리 개인 의견 (0) | 2021.08.22 |
[C++] 인터페이스에 관한 팁 (순수가상함수) (0) | 2021.06.09 |