我正在使用 boost::asio
从串行端口读取。我不断的从串口读取,通过std::cout
打印出来.但是一些奇怪的事情发生了。
我正在使用 TimeoutSerial
来自 here 的类(class).我的代码是这样的:
#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;
我得到了我想要的输出,但每个字符都在一个新行上,这是不受欢迎的。
谁能告诉我为什么会这样?
最佳答案
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;
}
}
关于c++ - boost::asio 在从串行端口读取时阻塞 std::cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18634062/