如何使用Java comm API处理读取超时
我的应用程序使用Java串行通信api。从读取文档开始,如果没有可用数据,inputstream.read()方法将阻塞 我尝试在serialport对象上设置超时,但isReceiveTimeoutEnabled()方法返回false,表明我的驱动程序本机不支持超时 那么,在上述情况下,实现读取超时的最佳方法是什么 谢谢,如何使用Java comm API处理读取超时,java,timeout,Java,Timeout,我的应用程序使用Java串行通信api。从读取文档开始,如果没有可用数据,inputstream.read()方法将阻塞 我尝试在serialport对象上设置超时,但isReceiveTimeoutEnabled()方法返回false,表明我的驱动程序本机不支持超时 那么,在上述情况下,实现读取超时的最佳方法是什么 谢谢, Fred如果它对您不起作用,只需将inputstream放入一个线程并实现您自己的超时。如果在流上调用close()以取消阻塞并关闭该线程超时,则需要两个线程 看门狗线程将
Fred如果它对您不起作用,只需将inputstream放入一个线程并实现您自己的超时。如果在流上调用close()以取消阻塞并关闭该线程超时,则需要两个线程 看门狗线程将监视读取线程,并在检测到超时时中断它 让读取线程告诉看门狗线程它即将开始读取,以及何时完成读取 让看门狗线程在读取开始时启动计时器,并在读取线程超时时中断读取线程,或在读取完成时停止侦听一段时间
如果您不熟悉Java线程,请阅读它。很容易出现多线程错误。您可以使用该方法检查下一个
read()
是否会阻塞。您还可以使用SerialPortEventListener作为回调函数,以获得新可用数据的通知,并仅在有事情要做时调用read
final SerialPort serialPort = ...;
final InputStream in = serialPort.getInputStream();
serialPortal.notifyOnDataAvailable(true);
serialPort.addEventListener(new SerialPortEventListener() {
public void serialEvent(SerialPortEvent event) {
if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
// read from InputSteam
}
}
});