我目前正在根植的Android设备上编译和执行一些C ++代码。我使用adb(adb shell)。要编译我的代码,我不使用NDK,但我使用CMake交叉编译
我正在使用unistd.h的函数sleep(seconds)
。
我在Android上遇到过一些关于该功能的奇怪行为:基本上,我有一个for循环,其中我std :: cout的东西,然后调用sleep(x)
。
如果我调用sleep(1)
,行为就是预期的行为:程序等待1秒,然后执行下一条指令。
如果我致电sleep(2)
,行为不是预期的行为。该程序永远停留在该指令上....直到我在我的PC键盘(而不是设备的键盘上)上按键,然后它卡在下一个sleep(2)
...直到我敲了一把钥匙等......
仅当设备屏幕关闭时才会出现此问题。只要我点击电源按钮打开屏幕,程序就会恢复并具有预期的行为。
N.B:行为与usleep(useconds)
我试图看看限制在1到2秒之间: 1.5s,1.25s,1.125s - >永远被阻止| 1.0625s - >大约50%的几率被阻止。
显然,如果线程睡眠时间超过1秒(至少2秒),则会阻止线程唤醒。 所以我的问题是,有没有人知道为什么会这样,并且对这个过程有详细的解释?
谢谢!
答案 0 :(得分:0)
Android在没有进行任何用户交互时将应用程序置于后台 - unix sleep和java timers等不会将它们唤醒。你必须使用android警报或runnable postDelayed处理程序。