int main(void) { boost::shared_ptr<boost::asio::io_service> io_svc( new boost::asio::io_service ); boost::shared_ptr<boost::asio::io_service::work> worker( new boost::asio::io_service::work(*io_svc) ); global_stream_lock.lock(); std::cout << "The program will exit once all work has finished.\n"; global_stream_lock.unlock(); boost::thread_group threads; for(int i=1; i<=5; i++) threads.create_thread(boost::bind(&WorkerThread, io_svc, i)); boost::this_thread::sleep(boost::posix_time::milliseconds(500)); io_svc->post(boost::bind(&Print, 1)); io_svc->post(boost::bind(&Print, 2)); io_svc->post(boost::bind(&Print, 3)); io_svc->post(boost::bind(&Print, 4)); io_svc->post(boost::bind(&Print, 5)); worker.reset(); threads.join_all(); return 0; }
int main(void) { boost::shared_ptr<boost::asio::io_service> io_svc( new boost::asio::io_service ); boost::shared_ptr<boost::asio::io_service::work> worker( new boost::asio::io_service::work(*io_svc) ); boost::shared_ptr<boost::asio::io_service::strand> strand( new boost::asio::io_service::strand(*io_svc) ); global_stream_lock.lock(); std::cout << "Press ENTER to exit!\n"; global_stream_lock.unlock(); boost::thread_group threads; for(int i=1; i<=2; i++) threads.create_thread(boost::bind(&WorkerThread, io_svc, i)); boost::shared_ptr<boost::asio::ip::tcp::socket> sckt( new boost::asio::ip::tcp::socket(*io_svc) ); try { boost::asio::ip::tcp::resolver resolver(*io_svc); boost::asio::ip::tcp::resolver::query query("www.packtpub.com", boost::lexical_cast<std::string>(80) ); boost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve( query ); boost::asio::ip::tcp::endpoint endpoint = *iterator; global_stream_lock.lock(); std::cout << "Connecting to: " << endpoint << std::endl; global_stream_lock.unlock(); sckt->async_connect(endpoint, boost::bind(OnConnect, _1)); } catch(std::exception &ex) { global_stream_lock.lock(); std::cout << "Message: " << ex.what() << ".\n"; global_stream_lock.unlock(); } std::cin.get(); boost::system::error_code ec; sckt->shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec); sckt->close(ec); io_svc->stop(); threads.join_all(); return 0; }
int main(void) { boost::shared_ptr<boost::asio::io_service> io_svc( new boost::asio::io_service ); boost::shared_ptr<boost::asio::io_service::work> worker( new boost::asio::io_service::work(*io_svc) ); global_stream_lock.lock(); std::cout << "The program will exit once all work has finished.\n"; global_stream_lock.unlock(); boost::thread_group threads; for(int i=1; i<=2; i++) threads.create_thread(boost::bind(&WorkerThread, io_svc, i)); io_svc->post(boost::bind(&ThrowAnException, io_svc, 1)); io_svc->post(boost::bind(&ThrowAnException, io_svc, 2)); io_svc->post(boost::bind(&ThrowAnException, io_svc, 3)); io_svc->post(boost::bind(&ThrowAnException, io_svc, 4)); io_svc->post(boost::bind(&ThrowAnException, io_svc, 5)); threads.join_all(); return 0; }
int main(void) { boost::shared_ptr<boost::asio::io_service> io_svc( new boost::asio::io_service ); boost::shared_ptr<boost::asio::io_service::work> worker( new boost::asio::io_service::work(*io_svc) ); std::cout << "Press ENTER key to exit!" << std::endl; std::vector<std::shared_ptr<std::thread>> threads; for(int i=1; i<=5; i++) { threads.push_back(std::make_shared<std::thread>(&WorkerThread, io_svc, i)); } std::cin.get(); io_svc->stop(); for ( auto thrd : threads ){ thrd->join(); } return 0; }
DispatchDownloader::~DispatchDownloader() { ppbox::dispatch::DispatchModule & disp_mod = util::daemon::use_module<ppbox::dispatch::DispatchModule>(io_svc()); disp_mod.free_dispatcher(dispatcher_); delete file_sink_; delete sink_; }
DispatcherBase * DispatchModule::alloc_dispatcher( bool shared) { DispatcherBase * dispatcher = NULL; if (shared) { if (managers_.empty()) { managers_.push_back(new SessionManager(io_svc())); } SessionManager * manager = managers_[0]; dispatcher = new SharedDispatcher(*manager); } else { dispatcher = new SingleDispatcher(io_svc()); } if (dispatcher) { dispatchers_.push_back(dispatcher); } return dispatcher; }
void * ScheduleManager::schedule_callback( boost::uint32_t delay, // ms void * user_data, callback_t const & callback) { boost::asio::deadline_timer * timer2 = new boost::asio::deadline_timer(io_svc()); timer2->expires_from_now(boost::posix_time::milliseconds(delay)); timer2->async_wait(boost::bind(callback, user_data, _1)); return timer2; }
void SingleDispatcher::async_open( framework::string::Url const & url, response_t const & resp) { LOG_INFO("[async_open]"); if (dispatcher_ == NULL) { dispatcher_ = TaskDispatcher::create(io_svc(), thread_->io_svc(), url); } else if (!dispatcher_->accept(url)) { delete dispatcher_; dispatcher_ = TaskDispatcher::create(io_svc(), thread_->io_svc(), url); } if (dispatcher_ == NULL) { io_svc().post(boost::bind(resp, error::not_support)); return; } return dispatcher_->async_open(url, resp); }
int main(void) { boost::shared_ptr<boost::asio::io_service> io_svc( new boost::asio::io_service ); boost::shared_ptr<boost::asio::io_service::work> worker( new boost::asio::io_service::work(*io_svc) ); std::cout << "Press any key to exit!" << std::endl; boost::thread_group threads; for(int i=1; i<=5; i++) threads.create_thread(boost::bind(&WorkerThread, io_svc, i)); std::cin.get(); io_svc->stop(); threads.join_all(); return 0; }
int main(void) { boost::shared_ptr<boost::asio::io_service> io_svc( new boost::asio::io_service ); boost::shared_ptr<boost::asio::io_service::work> worker( new boost::asio::io_service::work(*io_svc) ); boost::shared_ptr<boost::asio::io_service::strand> strand( new boost::asio::io_service::strand(*io_svc) ); global_stream_lock.lock(); std::cout << "Press ENTER to exit!\n"; global_stream_lock.unlock(); boost::thread_group threads; for(int i=1; i<=2; i++) threads.create_thread(boost::bind(&WorkerThread, io_svc, i)); boost::shared_ptr< boost::asio::ip::tcp::acceptor > acceptor( new boost::asio::ip::tcp::acceptor(*io_svc) ); boost::shared_ptr<boost::asio::ip::tcp::socket> sckt( new boost::asio::ip::tcp::socket(*io_svc) ); try { boost::asio::ip::tcp::resolver resolver(*io_svc); boost::asio::ip::tcp::resolver::query query( "127.0.0.1", boost::lexical_cast<std::string>(4444) ); boost::asio::ip::tcp::endpoint endpoint = *resolver.resolve(query); acceptor->open(endpoint.protocol()); acceptor->set_option( boost::asio::ip::tcp::acceptor::reuse_address(false)); acceptor->bind(endpoint); acceptor->listen(boost::asio::socket_base::max_connections); acceptor->async_accept(*sckt, boost::bind(OnAccept, _1)); global_stream_lock.lock(); std::cout << "Listening on: " << endpoint << std::endl; global_stream_lock.unlock(); } catch(std::exception &ex) { global_stream_lock.lock(); std::cout << "Message: " << ex.what() << ".\n"; global_stream_lock.unlock(); } std::cin.get(); boost::system::error_code ec; acceptor->close(ec); sckt->shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec); sckt->close(ec); io_svc->stop(); threads.join_all(); return 0; }