3

ブーストasioライブラリで最も単純なものの1つと思われるものを作成する方法が見つかりません:

シリアル ポートで利用可能なすべてのデータを読み取る

たとえば、Qt にはreadAll()からのメソッドがありQextSerialPortます。

実際、私が見つけたすべての例は、一定量のデータの読み取り、またはマルチスレッドに関するものです。

私の場合、GSM コントローラーからデータを読み取るために必要です。応答サイズは、送信されたコマンドとコントローラーのコンテキストに依存するため、指定できません。

4

2 に答える 2

3

これを試して:

boost::asio::read(
    sock,
    boost::asio::buffer(buf),
    boost::asio::transfer_at_least(1),
    ec
);
于 2017-07-04T06:15:16.590 に答える
2

またはfree 関数と組み合わせたtransfer_all()完了条件が必要です。read()async_read()

boost::array<char, 128> buf;
boost::system::error_code ec;
std::size_t n = boost::asio::read(
    sock, boost::asio::buffer(buf),
    boost::asio::transfer_all(), ec);
if (ec)
{
  // An error occurred.
}
else
{
  // n == 128
}
于 2013-04-02T15:33:20.840 に答える