Есть функция sleep() для Android NDK?
В Android NDK есть функция sleep(), которая спит для X miliseconds, но не блокирует цикл событий?
Мы пишем тесты API для работы на Mac, Windows и Android. До сих пор мы реализовали какой-то сон() для Mac и Windows, но мы все новичок в Android NDK и нуждаемся в некоторой помощи там. Заранее благодарю вас.
Ответы
Ответ 1
Итак, вы ищете метод sleep()
, который сходит на определенное количество времени, но не блокирует цикл событий? Это звучит странно для меня. Я думаю, вы могли бы использовать новый поток вместо этого и вызвать метод sleep() там - без использования какого-либо JNI.
Ответ 2
Включение @mreichelt в ответ:
Да, есть функция sleep(seconds)
.
1.add #include <unistd.h>
- Вызов:
sleep(seconds)
или usleep(microseconds)
Примечание: микросекунда (наша или греческая буква mu plus s) равна миллионной (10-6) секунды, а миллисекунда (мс или мсек) - одна тысячная секунды
Ответ 3
Обычные функции ожидания linux (usleep и т.д.) блокируют поток, который их вызывает. Это зависит от вас, какой поток, который, надеюсь, не является пользовательским интерфейсом.
Еще один подход к андроидному подходу состоял в том, чтобы настроить событие, которое произойдет в будущем, а затем вернуться из текущего события. Когда новое событие срабатывает, вы делаете следующий шаг. Подумайте, например, о машине состояния с каждым состоянием, которое вводится как событие, делая что-то эффективно мгновенно, планируя следующее состояние в будущем, а затем возвращаясь.
Ответ 4
ДА
он определен в unistd.h. Но будьте осторожны, функция сна не стандартизирована, поэтому на окнах сна, который определен в
`
на окнах
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, long)