[완료] C++11 std::thread, 강제종료 할 수 없는건가요?
글쓴이: twinwings / 작성시간: 토, 2015/07/04 - 9:12오후
#include <iostream> #include <thread> class hello { public: void run() { tid = std::thread(std::bind(&hello::forever, this)); } private: void forever() { while(1) { std::cout << "hello" << std::endl; std::this_thread::sleep_for(std::chrono::seconds(1)); } } private: std::thread tid; }; int main() { hello h; h.run(); std::this_thread::sleep_for(std::chrono::seconds(10)); return 0; }
main에서 빠져나오면서 hello의 소멸자가 호출되고,
tid의 소멸자가 차례로 호출되면서 쓰레드가 죽을 것이라 예상했지만 전혀 아니더군요
$ ./a.out hello hello hello hello hello hello hello hello hello hello terminate called without an active exception 중지됨 (core dumped)
(흔히, join 안했을 때 보던 문구...)
구글님에게 여쭤보니 std::thread::native_handle() 이용해서 직접 죽여라.. 라던데
언어차원에서 지원안해주는건가요? 설마?
Forums:
해결했습니다.
pthread의 경우 소멸자에서 join 없이 바로 pthread_cacel() 호출해도 아무런 문제가 발생하지 않던데,
std::thread의 경우, std::thread::native_handle() 이용해서 pthread_cancel() 호출하니
에러가 발생하더군요.
을
그래서 접근방법을 바꾸니까 해결됐습니다.
댓글 달기