Как использовать Boost.Asio c ++? - PullRequest
3 голосов
/ 04 апреля 2011

Я бы попробовал использовать библиотеку для использования сокета Boost.Asio c ++ на нескольких платформах.Я скачал последнюю версию здесь:

http://sourceforge.net/projects/boost/files/boost/1.46.1/

, но что теперь я использую в своем коде?Я должен скомпилировать это?включить достаточно?Можете ли вы сказать мне шаги?

Ответы [ 2 ]

8 голосов
/ 04 апреля 2011

Как вы используете это зависит от того, что вы хотите сделать,; -).

Документация находится здесь:

http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio.html

Вы найдете многопримеров, которые должны соответствовать вашим потребностям.

Для сборки, вы должны заметить, что зависимости библиотеки зависят от того, работаете ли вы на Windows или Linux.См. Здесь

http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/using.html

В частности:

В MSVC или Borland C ++ вы можете добавить -DBOOST_DATE_TIME_NO_LIB и -DBOOST_REGEX_NO_LIB в настройки вашего проекта, чтобы отключитьавтоподсоединение библиотек Boost.Date_Time и Boost.Regex соответственно.Кроме того, вы можете создать эти библиотеки и связать их с ними

Если вы не хотите, чтобы зависимости зависели от других библиотек Boost, тогда вы можете использовать не-Boost (я думаю, что в остальном идентично asio)библиотека отсюда: http://think -async.com /

Источники другой документации см. в этом вопросе по SO: Лучшая документация для Boost: asio?

Например, чтобы открыть последовательный порт, вы можете написать что-то вроде этого:

/** Manage serial connections.*/
class serial_manager
{

  boost::asio::io_service m_io_service;
  std::string m_name;
  const unsigned int m_baud_rate;
  const enum flow_control::type m_flow_control;
  const enum parity::type m_parity;
  const enum stop_bits::type m_stop_bits;
  const unsigned int m_char_size;
  boost::asio::serial_port  m_SerialPort;
  boost::system::error_code m_error;
public:

  /** A constructor.
   *  @param name The dvice name, for example "COM1" (windows, or "/dev/ttyS0" (linux).
   *  @param baud_rate The baud rate. 
   *  @param flow_control The flow control. Acceptable values are flow_control::none, flow_control::software, flow_control::hardware.
   *  @param parity The parity of the connection. Acceptable values are parity::none, parity::even, parity::odd.
   *  @param stop_bits The number of stop bits. Acceptable values are stop_bits::one, stop_bits::one_point_five, stop::bits::two
   *  @param char_size The number of characters in connection.
   */
  serial_manager(const std::string& name, 
         const unsigned int& baud_rate  = 19200,
         const enum flow_control::type&   flow_control  = flow_control::none,
         const enum parity::type&         parity        = parity::none,
         const enum stop_bits::type&      stop_bits     = stop_bits::one,
         const unsigned int& char_size  = 8
         ) 
;
  void open();
};

void
serial_manager::open() {
  if (!m_SerialPort.is_open()) 
    {
      m_SerialPort.open(m_name, m_error);

     if (m_error == boost::system::errc::no_such_file_or_directory ) 
     {  //for example you tried to open "COM1" on a linux machine.
        //... handle the error somehow
     }

      m_SerialPort.set_option(boost::asio::serial_port::baud_rate(m_baud_rate));
      m_SerialPort.set_option(boost::asio::serial_port::flow_control(m_flow_control));
      m_SerialPort.set_option(boost::asio::serial_port::parity(m_parity));
      m_SerialPort.set_option(boost::asio::serial_port::stop_bits(m_stop_bits));
      m_SerialPort.set_option(boost::asio::serial_port::character_size(m_char_size));


    }
 }
0 голосов
/ 04 апреля 2011

Прочитайте некоторые из предыдущих Boost.Asio вопросов по SO. Вы получите представление о некоторых методах, используемых при использовании этой библиотеки.

...