title: How to run multiple receiver using boost.thread each thread should be allocated for each receiver?
body: <pre><code>#include &lt;iostream&gt;
  #include &lt;time.h&gt;
  #include &lt;chrono&gt;
  #include &lt;ctime&gt;
  #include &lt;string&gt;
  #include &lt;boost/asio.hpp&gt;
  #include "boost/bind.hpp"
  #include &lt;string&gt;
  #include &lt;bits/stdc++.h&gt; 
  #include &lt;thread&gt;
  #include &lt;boost/thread.hpp&gt;
  using namespace std; 
  using boost::asio::io_service;
  
  
  const short multicast_port = 30001;
  
  class receiver
  {
  public:
    receiver(boost::asio::io_service&amp; io_service,
        const boost::asio::ip::address&amp; listen_address,
        const boost::asio::ip::address&amp; multicast_address)
       : socket_(io_service)
  
    {
      // Create the socket so that multiple may be bound to the same address.
      boost::asio::ip::udp::endpoint listen_endpoint(
      listen_address, multicast_port);
      socket_.open(listen_endpoint.protocol());
      socket_.set_option(boost::asio::ip::udp::socket::reuse_address(true));
      socket_.bind(listen_endpoint);
  
      // Join the multicast group.
      socket_.set_option(
          boost::asio::ip::multicast::join_group(multicast_address));
  
      socket_.async_receive_from(
          boost::asio::buffer(data_, max_length), sender_endpoint_,
          boost::bind(&amp;receiver::handle_receive_from, this,
            boost::asio::placeholders::error,
            boost::asio::placeholders::bytes_transferred));
    }
  
    void handle_receive_from(const boost::system::error_code&amp; error,
        size_t bytes_recvd)
    {
      if (!error)
      {
        std::cout.write(data_, bytes_recvd);
  
        std::chrono::time_point&lt; std::chrono::system_clock &gt; now = std::chrono::system_clock::now();
        auto duration = now.time_since_epoch();
        auto nanoseconds = std::chrono::duration_cast&lt; std::chrono::nanoseconds &gt;( duration );
        std::cout&lt;&lt;" "&lt;&lt;boost::this_thread::get_id()&lt;&lt;" "&lt;&lt;nanoseconds.count() &lt;&lt; " nanoseconds "&lt;&lt;std::endl;
  
  
  
        socket_.async_receive_from(
            boost::asio::buffer(data_, max_length), sender_endpoint_,
            boost::bind(&amp;receiver::handle_receive_from, this,
              boost::asio::placeholders::error,
              boost::asio::placeholders::bytes_transferred));
      }
    }
  
  private:
    boost::asio::ip::udp::socket socket_;
    boost::asio::ip::udp::endpoint sender_endpoint_;
    enum { max_length = 1024 };
    char data_[max_length];
  };
  
  int main(int argc, char* argv[])
  {
    try
    {
      if (argc != 3)
      {
        std::cerr &lt;&lt; "Usage: receiver &lt;listen_address&gt; &lt;multicast_address&gt;\n";
        std::cerr &lt;&lt; "  For IPv4, try:\n";
        std::cerr &lt;&lt; "    receiver 0.0.0.0 239.255.0.1\n";
        std::cerr &lt;&lt; "  For IPv6, try:\n";
        std::cerr &lt;&lt; "    receiver 0::0 ff31::8000:1234\n";
        return 1;
      }
  
      boost::asio::io_service io_service,io_service1;
  
          receiver r(io_service,
          boost::asio::ip::address::from_string(argv[1]),
          boost::asio::ip::address::from_string(argv[2]));
  
          receiver r1(io_service1,
          boost::asio::ip::address::from_string(argv[1]),
          boost::asio::ip::address::from_string(argv[2]));   
  
  
      boost::thread thread1{[&amp;io_service](){ io_service.run(); }}; 
  
      boost::thread thread2{[&amp;io_service1](){ io_service1.run(); }};
      thread1.join();
      thread2.join();
  
        //  boost::asio::io_service io_service;
        //   receiver r(io_service,
        //   boost::asio::ip::address::from_string(argv[1]),
        //   boost::asio::ip::address::from_string(argv[2]));
  
      //  for (int i = 0; i &lt; 2; ++i) {
      //     boost::thread z(boost::bind(&amp;boost::asio::io_service::run, &amp;io_service));
      //   z.join();
      // }
  
    }
    catch (std::exception&amp; e)
    {
      std::cerr &lt;&lt; "Exception: " &lt;&lt; e.what() &lt;&lt; "\n";
    }
  
    return 0;
  }    
  </code></pre>
  
  <p>I have updated the whole programm. 
  This code is working fine but not able to put threads code into the loop. 
  I am able to create multiple receiver(threads) manually but failed to create multiple threads using loop.</p>
  
  <p>I have updated the whole programm. 
  This code is working fine but not able to put threads code into the loop. 
  I am able to create multiple receiver(threads) manually but failed to create multiple threads using loop.</p>