从串口读取时,boost :: asio阻塞了std :: cout

时间:2013-09-05 10:37:04

标签: c++ boost serial-port boost-asio cout

我正在使用boost::asio从串口读取。我不断从串口读取并通过std::cout打印出来。但是有些奇怪的事情发生了。

我正在使用here中的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;时,我得到了我想要的输出,但每个字符都在一个新行上,这是不可取的。

所以有人能告诉我为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

std::cout默认是缓冲的,因此您需要将其刷新以在终端上显示它。使用std::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;
    }
}