gpt4 book ai didi

c++ - 如何使用 Boost.Asio C++?

转载 作者:太空狗 更新时间:2023-10-29 20:17:54 27 4
gpt4 key购买 nike

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

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

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

最佳答案

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

文档位于此处:

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

特别是:

With MSVC or Borland C++ you may want to add -DBOOST_DATE_TIME_NO_LIB and -DBOOST_REGEX_NO_LIB to your project settings to disable autolinking of the Boost.Date_Time and Boost.Regex libraries respectively. Alternatively, you may choose to build these libraries and link to them

如果您不想依赖于其他 boost 库,那么您可以使用此处的非 boost(我认为其他方面相同的 asio)库:http://think-async.com/

有关其他文档的来源,请参阅关于 SO 的这个问题: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));


}
}

关于c++ - 如何使用 Boost.Asio C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5537016/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com