【问题标题】:CPP call function after timeout超时后CPP调用函数
【发布时间】:2012-08-13 17:22:56
【问题描述】:

我正在使用 CPP,我想实现超时机制。
表单示例,名为“foo()”的函数,它只会在超时后触发一个函数执行并返回。

为什么我需要这个?

我有一个 Android 应用程序,它使用一个 CPP 库(使用 JNI 接口),在该库中有一些函数需要时间来处理。我不能在单独的线程中调用这些函数(从 java 或 CPP 作为 lib 限制),因此我在 android 应用程序中得到 ANR。

所以我将做什么,我将使用 JNI 调用 CPP 层中的一个函数,该函数将启动一个计时器并返回,以便 android 中的 UI 线程不会给出 ANR,当这个计时器超时时,它会调用那个时间函数,当处理完成时,它将通知 java 层。

我应该如何实现这个?

【问题讨论】:

  • 这个问题应该有帮助:stackoverflow.com/questions/879896/…
  • 有什么办法可以在cpp中实现定时器,超时时会出现一个函数。
  • 为什么你“不能在单独的线程中调用这些函数”?你不能没有线程。如果这是一个耗时且不可中断的进程,您可以在主线程(并获得 ANR)或另一个线程中执行它。如果您的执行在计时器上触发,它要么已经是一个单独的线程(计时器在其中计时),要么计时器将向某个线程发出信号。它也可以向主线程发出信号,但是你没有解决方案。

标签: android c++ c java-native-interface


【解决方案1】:

在您的本机 C++ 代码中,您也可以使用 POSIX 计时器和任何其他 POSIX 函数:

http://www.kernel.org/doc/man-pages/online/pages/man2/timer_create.2.html

为了方便许多标准任务(定时器、线程、套接字等),您可能需要考虑使用boost 库。不过,这需要一点研究。没有官方的 Android 端口的 boost。但是有一些说明如何构建提升,例如这本书http://www.wowebook.be/book/android-ndk-beginners-guide/#

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2016-09-24
    • 2013-11-23
    • 1970-01-01
    • 2021-11-23
    相关资源
    最近更新 更多