gpt4 book ai didi

使用 JNA 调用 Win32 WaitForSingleObject() 时,Java 计时器不运行

转载 作者:行者123 更新时间:2023-12-04 06:03:53 25 4
gpt4 key购买 nike

我正在尝试终止对 WaitForSignleObject() 的 JNA 调用与 Timer中断当前线程:

final Thread thread = Thread.currentThread();
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
thread.interrupt();
}
}, 3000);

try {
Kernel32.INSTANCE.WaitForSingleObject(processInfo.hProcess, Kernel32.INFINITE);
...
} catch (InterruptedException e) {
}

问题是 TimerTask.run() 3 秒后未按预期调用,仅在 WaitForSingleObject() 后调用退出自己。我究竟做错了什么?

谢谢!

最佳答案

线程中断机制是 Java 特有的特性,因此 native 代码不尊重它也就不足为奇了。

如果您只需要超时,可以使用 WaitForSingleObject() 的第二个参数反而。如果需要更复杂的逻辑,可以create an event通知等待线程中断,并使用 WaitForMultipleObjects() 关于那个事件和你的 hProcess .

关于使用 JNA 调用 Win32 WaitForSingleObject() 时,Java 计时器不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8608852/

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