0

boost::asioシリアルポートからの読み取りに使用しています。シリアルポートから継続的に読み取り、std::cout. しかし、いくつかの奇妙なことが起こります。

ここTimeoutSerialからクラスを使用しています。私のコードは次のようになります。

#include <iostream>
#include "TimeoutSerial.h"

using namespace std;

int main(){  
  TimeoutSerial serial;

  serial.open("/dev/ttyACM0", 9600 );      
  serial.setTimeout(boost::posix_time::seconds(1));

  char c = '0';
  while(true){
    try{
      serial.read( &c, 1 );
      cout << c;
    }catch( std::runtime_error err ){
      cout << "Error: " << err.what()<< endl;
    }
  }         
  return 0;
}

出力が得られず、理由がわかりません。に変更cout << c;するcout << c << endl;と、必要な出力が得られますが、各文字が改行されているため、望ましくありません。

では、なぜこれが起こっているのか誰か教えてもらえますか?

4

1 に答える 1

1

std::coutはデフォルトでバッファリングされるため、端末に表示するにはフラッシュする必要があります。Usingstd::endlは、 will と同様にこれを暗黙的に行いますstd::flush()。ループを次のように変更します

while(true) {
    try {
      serial.read( &c, 1 );
      cout << c;
      std::flush( std::cout );
    } catch ( std::runtime_error err ) {
      cout << "Error: " << err.what() << endl;
    }
}      
于 2013-09-05T14:58:54.063 に答える