Есть ли функция сна () для Android NDK? - PullRequest
12 голосов
/ 30 ноября 2010

Под Android NDK, есть ли функция sleep (), которая спит в течение X миллисекунд, но не блокирует цикл обработки событий?

Мы пишем тесты API для работы на Mac, Windows и Android. Пока что мы реализовали своего рода sleep () для Mac и Windows, но все мы новички в Android NDK и нуждаемся в некоторой помощи. Заранее спасибо.

Ответы [ 5 ]

11 голосов
/ 30 ноября 2010

Итак, вы ищете метод sleep(), который спит в течение определенного времени, но не блокирует цикл обработки событий?Это звучит странно для меня.Я думаю, что вы могли бы вместо этого использовать новый поток и вызывать там метод sleep () без использования JNI.

8 голосов
/ 27 мая 2015

Превращение комментария @mreichelt в ответ:

Да, есть функция sleep(seconds).

1.дд #include <unistd.h>

  1. Звоните: sleep(seconds) или usleep(microseconds)

примечание: микросекунда (нас или греческая буква mu плюс s) составляет одну миллионную (10 -6) секунды, а миллисекунда (мс или мс) составляет одну тысячную секунды

2 голосов
/ 30 ноября 2010

Обычные функции сна linux (usleep и т. Д.) Блокируют поток, который их вызывает.Это зависит от вас, какой поток - надеюсь, не пользовательский интерфейс.

Более подход в стиле Android состоит в том, чтобы настроить событие, которое должно произойти в будущем, а затем вернуться из текущего события.Когда начинается новое событие, вы делаете следующий шаг.Представьте себе, например, конечный автомат, в котором каждое состояние вводится как событие, эффективно выполняет что-то мгновенно, планирует следующее состояние на будущее и затем возвращает.

1 голос
/ 09 марта 2017

ДА, это определено в unistd.h Но будьте осторожны, функция сна не стандартизирована, поэтому для сна Windows, который определен в `на окнах

sleep(int millisenconds);

на Linux`

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

usleep занимает микросекунды, а сон занимает секунды.1 секунда = 1 *1000* 1000

0 голосов
/ 30 ноября 2010

Вы можете использовать [Handler.postDelayed] [1], чтобы запланировать запуск Runnable по истечении заданного времени. Тем временем цикл событий продолжит работать.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...