Here's a bit more detail of my current problem.

I have implemented destructors within ClassA and ClassB. When adding this thread to the thread_group, the thread objects destructors are being called as soon as they're added to the thread_group.

    struct MyStruct : ... {
        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); // destructors called here
        threads.add_thread(new boost::thread(c_b);
    }

I've wrapped the thread_group within unique_ptr so that I can call reset, but I don't even make it to this point because the thread objects have already been destroyed when being added to the thread (and program exits).

    template <class Event, class FSM>
    void psm_::MyEvent::on_exit(Event const& ev, FSM& sm)
    {
        std::unique_ptr<boost::thread_group> tg(&threads);
        tg.reset();
       
        threads.interrupt_all();
        threads.join_all();
    }

And if I don't add the destructors to the thread objects (ClassA, ClassB), I am able to reach on_exit when I need to.

Any thoughts as to why the destructors (which I need to make use of in on_exit) are being called when adding the new threads?

On Wed, May 20, 2015 at 1:47 PM, Lane <software.research.development@gmail.com> wrote:
I know you did, and thats still one path I'm following, but I'm having a hard time trying to understand how to wrap it in the way I currently have it written. If you have the time, please post.

On Tue, May 19, 2015 at 7:29 PM, Gavin Lambert <gavinl@compacsort.com> wrote:
On 20/05/2015 08:40, Lane wrote:
Thanks for the explanation, that helps. But what I'm looking to do is
find a way to call the destructor on the thread object. The ClassA and
classB objects are connected to a USB device and I need to find a way to
properly shut them down before destroying the threads in on_exit(). Any
thoughts?

I covered that in my second reply.  After joining the threads, you have to destroy the thread_group.  But first you must make it destroyable, by putting it in a unique_ptr.



_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users