我(貌似)随机收到错误:
"Insufficient system resources exist to complete the requested service"
当使用 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:
在网络上搜索此特定错误消息时,通常建议按此处所述增加页面缓冲池内存:
在我的情况下这样做有什么意义吗?
最佳答案
自从我在 Windows 上使用串行端口以来已经有很长很长时间了,所以请牢记这一点。从历史上看,早在 NT 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/举个例子。希望对您有所帮助。
关于c++ - boost 异步读/写失败, "Insufficient system resources exist to complete the requested service",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205437/