当前位置: 首页 > 面试题库 >

线程中断与JNI函数调用

濮阳霄
2023-03-14
问题内容

我正在使用此处接受的答案中的方法来构造一个gameloop线程。

AndroidService类中的哪里停止/销毁线程?

此刻,我的线程基本上获取了时间,进行了一个本机功能调用,以更新游戏逻辑,然后在调整的经过时间之前进入睡眠状态。

令我好奇的是,由于我对Threads仍然不太满意,因此用interrupt()杀死Thread有多快?如果它在本机函数中运行的代码的中间,它将停止在其中,还是安全地完成?

提前谢谢耶利米


问题答案:

不用担心,文档interrupt指出:

如果在调用Object类的wait(),wait(long)或wait(long,int)方法或join(),join(long),join(long,int)方法时阻塞了此线程,此类的sleep(long)或sleep(long,int)方法,则其中断状态将被清除,并将收到InterruptedException。

因此,只有InterruptedException在处于某种阻塞/睡眠/等待状态时,线程才会获取。如果您正在运行,则线程在进入这些状态之一之前不会获得异常。

您的循环应为:

while(!Thread.currentThread().isInterrupted()) // <- something of the sort here
{
    try{
        // do work
    } catch (InterruptedException e){
        // clean up
    }
}

更新:
此外,文档指出:

如果上述条件均不成立,则将设置该线程的中断状态。



 类似资料:
  • 因此,有人知道如何杀死一个线程,同时它调用任何JNI函数而不使用while循环。

  • 问题内容: 我们的游戏引擎本身可以在android上本地运行。我们需要从调用某些Java函数通过的。 为了进行调用,我们从此处(GitHub)使用JNIHelper.h / cpp: JniHelper.h,JniHelper.cpp 例如,此C ++代码: 理想情况下,我们希望所有这些调用都发生在上,并在函数调用完成后将an 作为参数传递给参数,并再次使用返回值进行调用。 调用函数的理想方法:

  • 问题内容: 我需要制作一个具有同步和异步功能的库。 -等到得到结果,然后返回结果。 -立即返回Future,如果需要,可以在完成其他操作后进行处理。 我图书馆的核心逻辑 客户将使用我们的库,他们将通过传递构建器对象来调用它。然后,我们将使用该对象构造一个URL,并通过执行该对象来对该URL进行HTTP客户端调用,并在将响应作为JSON字符串返回给我们之后,通过创建对象将该JSON字符串发送回给我们

  • 问题内容: 我有一个从C调用的Java函数的JNI包装器。我试图从不同的线程调用某些方法,并且在尝试获取JNIEnv指针的新副本时收到错误消息。下面使用m并在每种方法中调用它: 从主线程/初始线程调用JVM时,该JVM已被实例化,并且该(和其他方法)运行。当我获得envRes的值时,在子线程中它保持-2。 问题答案: 请参阅本章的文档。 在使用任何JNI函数之前,您至少需要为每个本机线程调用一次。

  • 我传递给Builder的lambda被填充到对象中,并定期(每小时)调用以刷新其他成员。它第一次被成功调用。我不确定lambda是否保留了,来合法地调用反向JNI函数? 我好像收到了11号信号错误,西格夫。这种分段错误是否可以以任何方式捕获,这样应用程序就不会崩溃? 它似乎在-

  • 问题内容: 我正在尝试按照以下指南使用LAME库在Android中实现MP3编码: Lame MP3 Encoder for Android http://developer.samsung.com/android/technical-docs/Porting-and- using-LAME-MP3-on -Android- JNI 但是我收到了java.lang.UnsatisfiedLinkE