【发布时间】:2011-05-17 12:47:58
【问题描述】:
在 Android NDK 下,是否有 sleep() 函数,它会休眠 X 毫秒,但不会阻塞事件循环?
我们正在编写适用于 Mac、Windows 和 Android 的 API 测试。到目前为止,我们已经为 Mac 和 Windows 实现了某种 sleep(),但我们都是 Android NDK 的新手,需要一些帮助。提前谢谢你。
【问题讨论】:
标签: c++ android android-ndk
在 Android NDK 下,是否有 sleep() 函数,它会休眠 X 毫秒,但不会阻塞事件循环?
我们正在编写适用于 Mac、Windows 和 Android 的 API 测试。到目前为止,我们已经为 Mac 和 Windows 实现了某种 sleep(),但我们都是 Android NDK 的新手,需要一些帮助。提前谢谢你。
【问题讨论】:
标签: c++ android android-ndk
将@mreichelt 评论转化为答案:
是的,有一个sleep(seconds) 函数。
添加#include <unistd.h>
致电:sleep(seconds) 或 usleep(microseconds)
注意:微秒(我们或希腊字母 mu 加 s)是百万分之一 (10 -6 ) 秒,而毫秒(ms 或 msec)是千分之一秒
【讨论】:
所以您正在寻找一种sleep() 方法,它会休眠一定时间但不会阻塞事件循环?这对我来说听起来很奇怪。我认为您可能想改用一个新线程并在那里调用 sleep() 方法 - 而不必使用任何 JNI。
【讨论】:
sleep(seconds) 或 usleep(microseconds)(您必须包含 正常的 linux 睡眠函数(usleep 等)会阻塞调用它们的线程。这取决于你是哪个线程 - 希望不是 UI 线程。
一个更 android 风格的方法是设置一个事件在未来发生,然后从当前事件返回。当新事件触发时,您将执行下一步。例如,考虑一个状态机,每个状态都作为一个事件输入,有效地即时执行某项操作,为未来时间安排下一个状态,然后返回。
【讨论】:
是的 它是在 unistd.h 中定义的,但要注意睡眠功能不是标准化的,所以在 Windows 睡眠中定义 ` 在窗户上
sleep(int millisenconds);
在 Linux 上`
int sleep(unsigned int seconds);
int usleep(useconds_t useconds);
usleep 需要几微秒,而睡眠需要几秒钟。 1秒=1*1000*1000
【讨论】:
您可以使用 [Handler.postDelayed][1] 来安排 Runnable 在设定的时间后运行,同时事件循环将继续工作。
[1]:http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable,长)
【讨论】: