【问题标题】:Are there any stable native threading APIs for Android?Android 是否有稳定的原生线程 API?
【发布时间】:2012-04-20 19:07:47
【问题描述】:

我将制作一个安卓游戏引擎,主要使用原生 C++。 我想使用线程,但我不想在 Java 中实现它,因为 JNI 很慢。我可以使用任何稳定的 Android 原生线程 API 吗?

【问题讨论】:

    标签: multithreading android-ndk


    【解决方案1】:

    我今天做了一些研究(Android NDK中的线程支持),似乎选项如下:

    1. C++11 在 Android 上具有原生线程支持

    2. Posix 线程(又名 pthread)。

    3. Boost 在 Android 上可用,包括线程支持。

    4. Poco 在 Android 上可用,包括线程支持。

    【讨论】:

      【解决方案2】:

      尝试在libpthread 中使用pthreads

      【讨论】:

      • 这里没有提到 libpthread:developer.android.com/sdk/ndk/overview.html。它是 libc 库的一部分吗?
      • @MartinErhardt 它似乎是 libc/bionic 的一部分(#include <pthread.h>。
      • 感谢您的支持我刚刚找到了一个关于这个主题的很棒的教程:android.wooyd.org/JNIExample/files/JNIExample.pdf
      • 还可以查看 NDK 中的 docs/STABLE-APIS.html 文件。它说“请注意,Android C 库包括对 pthread () 的支持,因此不需要“LOCAL_LIBS := -lpthread”。实时扩展也是如此(典型 Linux 发行版上的 -lrt) 。”
      【解决方案3】:

      你也可以试试Boost for Android的线程(Boost.Thread)。

      我不想在 Java 中实现它,因为 JNI 很慢

      根据第一篇帖子 here,原生化并不总是会让您的代码运行得更快(您可能仍在后台从 C++ 调用 Java 代码)。

      【讨论】:

      • 1.如果我不知道桌面 C++ 库(没有理由拒绝投票),我应该从哪里知道 Boost 库还包含线程 API 2. 我是否说过原生化让您的代码总是运行得更快? - 我只是害怕每次 Java 线程循环通过时从 Java 调用 C 函数(即使我可能仍在后台从 C++ 调用 Java 代码)
      • 我不明白您的评论 1. -- 我只是提出 Boost 线程,并不是要侮辱您或任何事情。性能问题的唯一明确答案是分析你的程序,这样你就知道什么是真正需要时间的。也许您可以使用 JNI 和 C++ 运行一个小测试,这将向您展示最适合您的需求。
      • 也不确定为什么投反对票。 . . 1. Boost 或 Poco 都是选项。 2. 不使用 Java 的原因是 JNI 速度慢,您在回答中确实解决了这个问题。
      猜你喜欢
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-06
      • 2012-11-14
      • 2022-12-04
      • 1970-01-01
      • 2012-10-11
      相关资源
      最近更新 更多