
I'm trying to use asio in linux and windows, and I have to use a very specific way of starting my IO Service to get it to work in windows xp: void start() { tcp::endpoint endpoint = *iterator_; socket_.async_connect(endpoint, boost::bind(&MessageHandler::handle_connect, this, boost::asio::placeholders::error, ++iterator_ ) ); boost::thread t( boost::bind( &boost::asio::io_service::run, &(socket_.get_io_service() ))); t.detach(); //threadPool_.schedule(boost::bind( &boost::asio::io_service::run, &(socket_.get_io_service()) ) ); } The commented out line is what I wanted to use (threadpool), as thread detach is far from an ideal situation. To work in windows, I have to call io_service.run() in this function and thread detach; it doesn't seem to work any other way. Everything pretty much works in linux. Is there a pattern that I should be using here for cross platform usage of the library? Any ideas why the threadpool solution doesn't work in windows? ( http://threadpool.sourceforge.net/) Thanks, -- Kenny Stone Connamara Systems, LLC

On Sat, 09 May 2009 17:36:30 +0200, Kenny Stone <kstone@connamara.com> wrote:
void start() { tcp::endpoint endpoint = *iterator_; socket_.async_connect(endpoint, boost::bind(&MessageHandler::handle_connect, this, boost::asio::placeholders::error, ++iterator_ ) ); boost::thread t( boost::bind( &boost::asio::io_service::run, &(socket_.get_io_service() ))); t.detach(); //threadPool_.schedule(boost::bind( &boost::asio::io_service::run, &(socket_.get_io_service()) ) ); }
The commented out line is what I wanted to use (threadpool), as thread detach is far from an ideal situation. To work in windows, I have to call io_service.run() in this function and thread detach; it doesn't seem to
I can't help you with the threadpool. But as the destructor of boost::thread calls detach() you don't need to call it yourself? Boris
[...]
participants (2)
-
Boris Schaeling
-
Kenny Stone