请教boost:asio读取串口的基础问题

prettyknight 2010-03-29 09:06:26
http://www.cppprog.com/2009/0720/133_5.html
用boost::asio进行串口读取的方法在上面的网页里有介绍

读串口时,请问如果读到的字符数不满缓冲区,怎样才能把实际读取到的字节数保存到一个变量里?
...全文
619 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
prettyknight 2010-05-19
  • 打赏
  • 举报
回复
楼上正解!
结贴!
prettyknight 2010-03-30
  • 打赏
  • 举报
回复
做过实验了,在handle_read函数体里是可以通过std::size_t bytes_transferred形参读到长度的
那能不能把它保存到main函数的一个局部变量里?不要通过全局变量
prettyknight 2010-03-30
  • 打赏
  • 举报
回复
我用的是异步方式
prettyknight 2010-03-30
  • 打赏
  • 举报
回复
To楼上:
怎么取啊?
async_read里传入的_1和_2是什么意思?
还有,你说的第二个参数是指async_read的第二个参数还是boost::bind的第二个参数还是handle_read的第二个形参?
Waiting4you 2010-03-30
  • 打赏
  • 举报
回复
_1,_2是boost::bind的占位符
要把数据保存到main里,可以把那个例子里的
void handle_read(char *buf,boost::system::error_code ec,
std::size_t bytes_transferred)
{
cout.write(buf, bytes_transferred);
}

改成函数对象,或者多一个参数也可以,如:
void handle_read(char *buf,std::string *out,boost::system::error_code ec,
std::size_t bytes_transferred)
{
out->assign(buf, buf+bytes_transferred);
}


async_read(sp, buffer(buf), boost::bind(handle_read, buf, _1, _2));

改成
std::string strOut;
async_read(sp, buffer(buf), boost::bind(handle_read, buf, &strOut, _1, _2));
yunccll 2010-03-30
  • 打赏
  • 举报
回复
肯定可以保存到main的局部变量里,关键还是看你的程序怎么设计了!

异步的读写方式,读到的数据一般只需要,在handler里用一下就好了。

void server::handler(const boost::system::error_code& /*error*/,
std::size_t /*bytes_transferred*/){

//一般这里处理数据就可以了
}


如果要保存数据,可以通过传某个对象的指针或者引用到handler能看到的范围。
或者通过全局变量(类的静态变量,普通全局变量)
yunccll 2010-03-29
  • 打赏
  • 举报
回复
你是用同步还是异步的方式编写?

异步方式的 callback函数,第二个参数就是返回了的字节数目。
知道长度,可以从buffer里直接取出来的

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧