如何使用Boost.Asio c ++?

时间:2011-04-04 10:06:36

标签: c++ boost boost-asio

我会尝试使用该库在多个平台上使用套接字Boost.Asio c ++。 我在这里下载了最新版本:

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

但现在我在代码中使用了什么? 我编译了吗?包括够了吗? 你能告诉我这些步骤吗?

2 个答案:

答案 0 :(得分:8)

你如何使用它取决于你想做什么,; - )。

文档可在此处找到:

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库,那么您可以使用此处的非增强(我认为是相同的asio)库:http://think-async.com/

有关其他文档的来源,请参阅此问题:Best documentation for 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));


    }
 }

答案 1 :(得分:-1)

阅读以前关于SO的Boost.Asio个问题。您将对使用此库时使用的一些技术有所了解。