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会隐含地执行此操作,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 回答