【问题标题】:Is there a sleep() function for Android NDK?Android NDK 有 sleep() 函数吗?
【发布时间】:2011-05-17 12:47:58
【问题描述】:

在 Android NDK 下,是否有 sleep() 函数,它会休眠 X 毫秒,但不会阻塞事件循环?

我们正在编写适用于 Mac、Windows 和 Android 的 API 测试。到目前为止,我们已经为 Mac 和 Windows 实现了某种 sleep(),但我们都是 Android NDK 的新手,需要一些帮助。提前谢谢你。

【问题讨论】:

    标签: c++ android android-ndk


    【解决方案1】:

    将@mreichelt 评论转化为答案:

    是的,有一个sleep(seconds) 函数。

    1. 添加#include <unistd.h>

    2. 致电:sleep(seconds)usleep(microseconds)

    注意:微秒(我们或希腊字母 mu 加 s)是百万分之一 (10 -6 ) 秒,而毫秒(ms 或 msec)是千分之一秒

    【讨论】:

      【解决方案2】:

      所以您正在寻找一种sleep() 方法,它会休眠一定时间但不会阻塞事件循环?这对我来说听起来很奇怪。我认为您可能想改用一个新线程并在那里调用 sleep() 方法 - 而不必使用任何 JNI。

      【讨论】:

      • 我应该更清楚一点:我想睡觉,但不要阻塞其他进程。我自己的进程应该被阻止。
      • 不能阻止其他进程。它们是……其他进程。他们不依赖于你跑步。也就是说,在事件循环中使用 sleep() 强烈表明某些东西被破坏了。
      • 这显示了我对这个平台的态度。那么,Android 有 sleep() 函数吗?
      • @hai:是的,是的。 Android SDK 中的休眠功能:developer.android.com/reference/java/lang/… C/C++ 中使用的休眠功能:sleep(seconds)usleep(microseconds)(您必须包含 )。
      • 关于#include 的评论非常有用 - 您会考虑更新您的答案以包含它吗?
      【解决方案3】:

      正常的 linux 睡眠函数(usleep 等)会阻塞调用它们的线程。这取决于你是哪个线程 - 希望不是 UI 线程。

      一个更 android 风格的方法是设置一个事件在未来发生,然后从当前事件返回。当新事件触发时,您将执行下一步。例如,考虑一个状态机,每个状态都作为一个事件输入,有效地即时执行某项操作,为未来时间安排下一个状态,然后返回。

      【讨论】:

        【解决方案4】:

        是的 它是在 unistd.h 中定义的,但要注意睡眠功能不是标准化的,所以在 Windows 睡眠中定义 ` 在窗户上

        sleep(int millisenconds);
        

        在 Linux 上`

        int sleep(unsigned int seconds);
        int usleep(useconds_t useconds);
        

        usleep 需要几微秒,而睡眠需要几秒钟。 1秒=1*1000*1000

        【讨论】:

          【解决方案5】:

          您可以使用 [Handler.postDelayed][1] 来安排 Runnable 在设定的时间后运行,同时事件循环将继续工作。

          [1]:http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable,长)

          【讨论】:

          • +1,基于安排定时事件可能是真正问题的正确答案
          • 这是用 Java 编写的 Android 应用程序的正确方法。但是 Hai 想知道如何在 C++ 程序中休眠而不阻塞程序,这只能使用多线程来完成。
          猜你喜欢
          • 2017-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-30
          • 1970-01-01
          • 2023-02-23
          • 2012-05-21
          • 1970-01-01
          相关资源
          最近更新 更多