我正在尝试编写一个事件中断代码。 这是一小段代码,我被卡住了。
//some code here
long current_time=System.currentTimeMillis();
long end=current_time+10*1000;//a timer limit of 10 seconds
Packet_ packet_=new Packet_();
while(end>System.currentTimeMillis()){
packet_ = receivePacket();//System waits for the packet to arrive on the socket in the receivePacket function.
break;
}
packet_.printPacketDetails();
//some code here
在这里,我将结束变量设置为10秒。
我想在接收数据包或计时器关闭时退出循环。
这里的问题是,如果数据包到达,代码会从while循环中出来,但如果当前时间超过结束变量,它就不会从while循环中出来。
答案 0 :(得分:0)
使用Future更简单:
private final ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<Packet> future = executorService.submit(() -> receivePacket());
try {
Packet packet = future.get(10, TimeUnit.SECONDS);
} catch (TimeoutException e) {
// HANDLE TIMEOUT HERE
} catch (InterruptedException | ExecutionException e) {
// HANDLE FAILURE HERE
}