Dire, ho una classe C++ che include un puntatore del thread come variabile membro. Il thread continua a funzionare finché il programma non si chiude. Se cancello il puntatore nel distruttore, sembra che il thread non sia ancora finito in quel momento? Qual è la migliore pratica per gestire questo o alcuni trucchi?Come eliminare in modo sicuro un puntatore del filo in un distruttore?
codice di esempio:
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?
}
Provare a gestire con 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
Perché stai usando 'new' per il thread in primo luogo? Sembra abbastanza inutile. – juanchopanza
dovresti uscire da quel thread con garbo, quindi unirti per aspettare che finisca, in questo modo: Car :: ~ Car() {m_runningThreadPtr-> join(); elimina m_runningThreadPtr; } – wshcdr