On Fri, Mar 19, 2010 at 7:45 AM, Rutger ter Borg <rutger@terborg.net> wrote:
Sean McAllister wrote:

> The only functions I'm binding with boost::bind are members of
> ClassifierContext, eg:
>
> ICMessage::async_read(socket_,
>
boost::bind(&ClassifierContext::handleCmdMsg,
> this,
>                      _1,_2,_3));
>
> Since the io_service object is stopped in the destructor of
> ClassifierContext, shouldn't that be OK?  Or should
> I still try to create a shared_from_this off of the ClassifierContext
> class?
>

Not sure, given you are running multiple threads. According to the
documentation, io_service::stop() doesn't block, so it could still be
needing the shared_from_this stuff.

Another approach is to allocate the work object in your member io_loop of
ClassifierContext, and in the destructor, do something like

m_work_ptr.reset();
ioService_.run();

this makes sure all outstanding operations are finished.

Cheers,

Rutger



Hmmm, I've only got the one extra thread to run the asynchronous event loop in.  If I have
async_read events outstanding, wouldn't the above code cause my destructor to block 
until I've read another message (which may happen quite infrequently)?
 

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