boost asio serial_port読み書きシリアルポート


以下はserial_port同期読み書きシリアルポートデバイスのサンプルコード:
#include <iostream>
#include <boost/asio.hpp>
#include <boost/bind.hpp>

using namespace std;

int main(int argc, char* argv[])
{
	try
	{
		boost::asio::io_service io;
		boost::asio::serial_port sp(io, "COM1");

		sp.set_option(boost::asio::serial_port::baud_rate(38400));
		sp.set_option(boost::asio::serial_port::flow_control());
		sp.set_option(boost::asio::serial_port::parity());
		sp.set_option(boost::asio::serial_port::stop_bits());
		sp.set_option(boost::asio::serial_port::character_size(8));

		boost::asio::write(sp, boost::asio::buffer("
", 1)); char buf[101]; boost::system::error_code err; while (true) { size_t ret = sp.read_some(boost::asio::buffer(buf, 100), err); if (err) { cout << "read_some Error: " << err.message() << endl; break; } else { buf[ret] = '\0'; cout << buf; } } io.run(); } catch (exception& err) { cout << "Exception Error: " << err.what() << endl; } getchar(); return 0; }

読み書きタイムアウト制御を行いたい場合は、書くには非同期で書く方法を適用し、タイミングコードを追加する必要があります.
boost::asio::deadline_timer timer(io);
timer.expires_from_now(boost::posix_time::millisec(60000));
timer.async_wait(boost::bind(&boost::asio::serial_port::cancel,  &sp));