当前位置:  开发笔记 > 编程语言 > 正文

在C++中设置ifstream的超时?

如何解决《在C++中设置ifstream的超时?》经验,为你挑选了1个好方法。

我们试图从连接到linux盒子的2 usb鼠标中读取数据(这些数据用于机器人的测距/定位).所以我们需要不断地从每只鼠标中读取它移动了多少.问题是当鼠标没有移动时,它不会发送任何数据,因此我们从中获取数据块的文件流,因此程序无法进行里程计算(其中涉及速度的时间测量) .

有没有办法在输入流上设置超时(我们在C++中使用ifstream并从/ dev/input/mouse读取),这样我们就可以知道鼠标何时不移动,而不是等待要收到的活动?或者我们需要搞乱线程(arggh ......)?欢迎任何其他建议!

提前致谢!



1> Marc..:

从linux中的多个文件描述符读取的常用方法是使用select().我建议从联机帮助页开始.基本系统流程如下:

1)初始化设备
2)获取设备文件描述符列表
3)设置超时
4)使用文件描述符调用select并将超时作为参数 - 它将阻塞,直到其中一个文件描述符上有数据或超时为止
5 )确定为什么select返回并相应地执行(即对具有数据的文件描述符调用read()).您可能需要在内部缓冲读取结果,直到获得整个数据克.
6)循环回到4.

这可以成为你的程序主循环.如果您已经有一个不同的主循环,可以在不循环的情况下运行上面的循环,但是您需要确保该函数被足够频繁地调用,这样您就不会丢失串行端口上的数据.您还应该确保您的更新速率(即1 /超时)足够快,适合您的主要任务.

Select可以对任何文件描述符进行操作,例如网络套接字以及通过文件描述符公开接口的任何其他内容.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有