我正在使用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;
时,我得到了我想要的输出,但每个字符都在一个新行上,这是不可取的。
所以有人能告诉我为什么会这样吗?
答案 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;
}
}