말, 멤버 변수로 스레드 포인터를 포함하는 C++ 클래스가 있습니다. 스레드는 프로그램이 종료 될 때까지 계속 실행됩니다. 소멸자에서 포인터를 삭제하면 해당 시점에 스레드가 아직 완료되지 않은 것 같습니다.이 방법이나 트릭을 관리하는 가장 좋은 방법은 무엇입니까?소멸자에서 안전하게 스레드 포인터를 삭제하는 방법은 무엇입니까?
샘플 코드 :
는class Car {
public:
Car();
~Car();
private:
boost::thread *m_runningThreadPtr;
};
Car::Car() {
m_runningThreadPtr = new boost::thread();
}
Car::~Car() {
delete m_runningThreadPtr; // The thread should be still running now.
// Problematic if it was deleted here?
}
boost :: shared_ptr 처리를 시도하십시오. http://stackoverflow.com/questions/13823300/pointer-to-boostthread http://www.boost.org/doc/libs/1_55_0/doc/html/ thread/thread_management.html – fox
왜 처음에는 쓰레드에'new'를 쓰고 있습니까? 꽤 불필요한 것 같습니다. – juanchopanza
당신은 정상적으로 그 쓰레드를 끝내고 다음과 같이 끝내기 위해 합류해야합니다 : Car :: ~ Car() {m_runningThreadPtr-> join(); 삭제 m_runningThreadPtr; } – wshcdr