gpt4 book ai didi

java - 需要一种可中断的方式来监听工作线程中的 UDP 数据包

转载 作者:行者123 更新时间:2023-12-01 13:18:02 27 4
gpt4 key购买 nike

我正在开发一个 Google Glass 应用程序,它需要在工作线程中监听 UDP 数据包(与发送 UDP 数据包的现有系统集成)。我之前发布了一个问题(请参阅 here )并收到了一个答案,其中提供了有关如何执行此操作的一些指导。使用其他讨论中的方法,我将有一个在 DatagramSocket.receive() 上被阻止的工作线程。

进一步阅读表明我需要能够按需启动/停止此操作。这让我想到了我在这里发布的问题。我怎样才能以能够(优雅地)中断 UDP 监听的方式执行上述操作?有什么方法可以“很好地”要求套接字中断来自另一个线程的 receive() 调用?

或者是否有另一种方法以可中断的方式监听 UDP 数据包,以便我可以根据需要启动/停止监听器线程以响应设备事件?

最佳答案

我的建议:

private DatagramSocket mSocket;

@Override
public void run() {
Exception ex = null;
try {
// read while not interrupted
while (!interrupted()) {
....
mSocket.receive(...); // excepts when interrupted
}
} catch (Exception e) {
if (interrupted())
// the user did it
else
ex = e;
} finally {
// always release
release();

// rethrow the exception if we need to
if (ex != null)
throw ex;
}
}

public void release() {
// causes exception if in middle of rcv
if (mSocket != null) {
mSocket.close();
mSocket = null;
}
}

@Override
public void interrupt() {
super.interrupt();
release();
}

干净利落、简单、总是释放和打断,在两种情况下会干净利落地阻止你。

关于java - 需要一种可中断的方式来监听工作线程中的 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22309976/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com