シリアルポートでBoost:asioライブラリを使用する方法を学んでいます。同期書き込みと読み取りを使用してコードを記述しましたが、非同期を使用したいのですが、機能しません。簡単な例:
void readHandler(const boost::system::error_code&,std::size_t);
streambuf buf;
int main(int argc,char *argv[]){
io_service io;
serial_port port(io,PORT);
if(port.isopen()){
while(1){
// ... getting std::string::toSend from user ...
write(port,buffer(toSend.c_str(),toSend.size()));
async_read_until(port,buf,'\n',readHandler); // <= it's returning but not calling readHandler at all
}
port.close();
}
}
void readHandler(const boost::system::error_code& error,std::size_t bytes_transferred){
std::cout << "readHandler()" << std::endl;
//... reading from buf object and calling buf.consume(buf.size()) ...
}
async_read_until()は返されますが、 readHandler()は呼び出されません。同期読み取りに変更すると、ポートOKからの読み取りになります。また、各whileループでbufオブジェクトをチェックしましたが、空です。私が間違っているのは??