我(似乎)随机收到错误:
"系统资源不足,无法完成所请求的服务"
将boost::asio::async_read_until
或boost::asio::async_write
与串行端口一起使用时。
将串口声明为:
boost::asio::serial_port mSerialPort;
发生此错误后,我尝试
try
{
mSerialPort.cancel();
mSerialPort.close();
}
catch(boost::system::system_error error)
{
;
}
其中一个(不确定哪个)挂起并且永不返回,甚至没有抛出异常。
一般来说,这个错误是什么意思?
有人遇到过这个问题吗?我应该调查任何方向吗?
编辑:
有问题的串口使用USB仿真器。
关于这个other SO Question,特别是Hans Passant的评论,这个错误是否可能与设备驱动程序有关?我使用与其他硬件组件相同的代码,从未得到过这种行为。
编辑2:
在网上搜索此特定错误消息时,通常建议按照此处所述增加分页池内存:
在我的案例中这样做有什么意义吗?
答案 0 :(得分:0)
自从我使用Windows上的串行端口以来,已经很长很长时间了,所以请记住这一点。从历史上看,早在新的4.0天,大多数串行端口驱动程序从官方NT内核DDK指南中删除都无法正确执行异步i / o,并且会不时出现您的确切错误和/或锁定。解决方案是只使用串行i / o的同步i / o,它正常工作。如果基于USB的串行端口的驱动程序最初是古老的,它可能会复制此问题。
我还要确保您使用与已知工作模式相同的设计模式。请尝试http://www.ridgesolutions.ie/index.php/2012/12/13/boost-c-read-from-serial-port-with-timeout-example/作为示例。希望有所帮助。
答案 1 :(得分:0)
错误通常意味着主内存最大化,系统在交换机上分配内存,直到硬盘已满。根据程序运行的时间长短,可能会因内存泄漏而发生。
但是在你的情况下,在驱动程序级别发生了一些事情。您应该检查事件查看器,以防万一在那里报告(假设窗口)。
你能从串口取回任何东西吗?根据您的代码,如果没有发回任何内容,从端口读取将无限期阻止。
要尝试的事情:
这是一个很棒的boost / asio资源(基于POSIX,但一般信息适用于所有平台):http://www.webalice.it/fede.tft/serial_port/serial_port.html