解释在Android上执行的Unix sleep()函数的行为
Explain behavior of Unix sleep() function executed on Android
我目前正在有根的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)
......直到我按下键,等等...
仅当设备屏幕关闭时,才会发生此行为。一旦我单击电源按钮打开屏幕,程序就会恢复并具有预期的行为。
注意:行为与usleep(useconds)
相同
我试图查看限制在 1 到 2 秒之间:1.5秒、1.25秒、1.125秒 ->始终保持封锁状态 |1.0625s -> ~50% 几率保持封锁。
显然,如果线程睡眠超过 1 秒(至少 2 秒),有一些东西会阻止线程唤醒。所以我的问题是,有没有人知道为什么会发生这种情况,并对过程有详细的解释?
谢谢!
Android在不
进行任何用户交互时将应用程序置于后台 - Unix睡眠和Java计时器等不会唤醒它们。 您必须使用安卓警报或可运行的 postDelay 处理程序。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 在定时器回调函数中使用 Sleep() 会导致C++出现问题吗?
- 为什么Main函数上的Sleep()会停止所有线程
- Windows.h Sleep(int) 函数是否浪费?
- 在Xcode(mac api)上,是否有任何带有Sleep()函数/命令的文件?
- 线程中的 sleep() 函数的目的是什么?
- 为什么函数 sleep() 在 klee 执行 Objectfile 时不能工作?
- C++函数 Sleep() 在一段代码之前执行
- 为什么sleep in函数忽略了程序中的几个顺序指令
- Sleep() 函数之前的代码不起作用
- 如何在不使用 sleep() 的情况下使用 ontimer 函数延迟进程
- Sleep()函数用法
- WinAPI Sleep()函数调用的睡眠时间比预期的要长
- 解释在Android上执行的Unix sleep()函数的行为
- 我可以用什么代替sleep()函数?