gpt4 book ai didi

c++ - 使用 NDK 将选择循环应用程序移植到 Android。设计问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:40:29 26 4
gpt4 key购买 nike

我有一个网络应用程序使用这样的选择循环:

bool shutdown=false;
while (!shutdown) {

[do something]
select(...,timeout);
}

Android 应用程序中的主循环不能再像这样工作了,因为应用程序需要接收 Intent、需要处理 GUI 等。

我想我基本上有三种可能性:

  1. 将主循环移至应用程序的 java 部分。
  2. 让循环在它自己的线程中运行,并以某种方式与 java 进行通信。
  3. 拧紧 Android <= 2.3 并使用 native 事件并使用 AInputQueue/ALooper 而不是选择。

第一种可能性并不容易,因为 java 没有适用于 fds 的 select。在每次循环后简单地使用 select 和 return 到 java 也不是一个优雅的可能性,因为这需要将超时设置为 20ms 之类的东西,以便在程序的 java 部分获得良好的响应时间。

第二种可能性听起来更好,但我已经在 java 和程序的 c++/c 部分之间进行了一些交流。冷工作的东西:

  1. 使用套接字,有点丑。
  2. 在“java gui 线程”中使用 native 调用,在“c 线程”中使用 native 回调。两个线程都需要有线程安全的实现,但这是可管理的。

我还没有探索第三种可能性,但我认为这不是可行的方法。

我想我可以一起破解一些可行的东西,但我想问的是选择的最佳路径是什么。

最佳答案

根据提供的有限信息,我可以想到以下方法:

一个循环可以在一个单独的线程中运行,有两个选项:
a) 寻找 gui 引​​导的变化(基于全局 native 状态变量的值,比如枚举类型的 native_app_state)
b) 某些事情触发了对 Java 的回调

您可以使用单独的 native 函数或一个集成的 native 函数来响应来自 Java 的 GUI 事件 - 您可以在其中使用该全局 native 状态变量的状态。

您可以根据每个状态下发生的情况以及应用程序的性能限制来优化实现。

关于c++ - 使用 NDK 将选择循环应用程序移植到 Android。设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4642934/

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