
Hi Igor, Michi, -------- Original-Nachricht --------
Datum: Wed, 15 Sep 2010 16:14:20 +0200 Von: michi7x7
An: boost-users@lists.boost.org Betreff: Re: [Boost-users] ASIO Win32 Thread not terminated
Hi manuel,
You're right, the number of threads doesn't increase when I create more clients. Still, I'd like to know when these threads terminate. Do they nescessarily run until the app exits, or is there a way of telling asio 'hey, I'm done with sockets now, no need to keep these threads running'.
i think the threads are terminated when the destructor of the io_service is called. Creating threads is too expensive, to kill them everytime the program is idle. So they are usually left in a blocked state. You can try this by putting an iostream into brackets {} and set a breakpoint afterwards.
yes, that's what I thought, too. But in the example, the whole code is already in {} (the try block) and the threads are still there when reaching the return statement at the end of main (even if I give them time to finish by using a sleep or a for-loop). I also get the same behaviour if I change the main function like that: boost::asio::io_service* io_service = new boost::asio::io_service; try { client c( *io_service, "localhost", "80" ); client c2( *io_service, "www.heise.de", "80" ); client c4( *io_service, "www.google.de", "80" ); io_service->run(); } catch (std::exception& e) { std::cout << "Exception: " << e.what() << "\n"; } delete io_service; // sleep or for-loop here changes nothing return 0; } -> still two additional threads running here. Anyway, thanx for your help! best Manuel
If the threads are still running, they might be killed using an old C-technique, called atexit().
Regards, michi7x7 _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
-- Neu: GMX De-Mail - Einfach wie E-Mail, sicher wie ein Brief! Jetzt De-Mail-Adresse reservieren: http://portal.gmx.net/de/go/demail