
I'm using the boost meta state machine and upon entry of this state, I create two threads, and stop these threads in the on_exit(). In on_entry(), I call the functors of each class and create threads and add those to a boost thread_group. What I need to do now is call the destructor of the objects on the threads ( of ClassA and ClassB) within on_exit(). I'm unclear as to how the destructors of the objects would/should be called when interrupting the threads. The destructors are currently not being called. struct MyEvent : public msm::front::state<> { template <class Event, class FSM> void on_entry(Event const&, FSM&); template <class Event, class FSM> void on_exit(Event const&, FSM&); boost::thread_group threads; }; template <class Event, class FSM> void psm_::MyEvent::on_entry(Event const& ev, FSM& sm) { auto bb = std::make_shared<bounded_buffer<MyData> >(100); ClassA<bounded_buffer<MyData> > c_a(bb); ClassB<bounded_buffer<MyData> > c_b(bb); threads.add_thread(new boost::thread(c_a)); threads.add_thread(new boost::thread(c_b)); } template <class Event, class FSM> void psm_::MyEvent::on_exit(Event const& ev, FSM& sm) { threads.interrupt_all(); threads.join_all(); } template <class Buffer> class ClassB { private: typedef typename Buffer::value_type value_type; shared_ptr<Buffer> m_container; public: ClassB(shared_ptr<Buffer> buffer) : m_container(buffer) { } ~ClassB() { // ... } void operator()() { try { // ... do stuff boost::this_thread::interruption_point(); } catch(const boost::thread_interrupted&) { // ... } } }