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;
}
Exemple #4
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;
 }
Exemple #7
0
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;
}