2010-11-29 20 views
12

En Android NDK, ¿hay una función sleep() que duerme durante X milisegundos, pero no bloquea el bucle de evento?¿Hay una función sleep() para Android NDK?

Estamos escribiendo pruebas API para trabajar en Mac, Windows y Android. Hasta ahora, hemos implementado algún tipo de suspensión() para Mac y Windows, pero todos somos nuevos en Android NDK y necesitamos ayuda allí. Gracias de antemano.

Respuesta

10

por lo que están buscando un método sleep() que hace dormir durante una cierta cantidad de tiempo, pero no bloquea el bucle de eventos? Esto me suena extraño. Creo que es posible que desee utilizar un nuevo hilo en su lugar y llamar al método sleep() allí, sin tener que utilizar ningún JNI.

+0

Debería ser más claro: quiero dormir, pero no bloqueo * otros * procesos. Mi propio proceso debe ser bloqueado. –

+2

* No puede * bloquear otros procesos. Son ... otros procesos. No dependen de ti corriendo. Dicho esto, usar sleep() en un ciclo de evento es una fuerte indicación de que algo se está rompiendo. – hackbod

+0

Eso muestra lo verde que soy para esta plataforma. Entonces, ¿hay una función sleep() para Android? –

0

Puede utilizar [Handler.postDelayed] [1] para programar la ejecución de un Runnable después de un tiempo establecido, mientras tanto, el bucle de eventos continuará funcionando.

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

+0

+1, sobre la base de que programar un evento programado es probablemente la respuesta correcta a la pregunta real –

+0

Es el enfoque correcto para las aplicaciones de Android escritas en Java. Pero Hai quería saber cómo dormir en un programa en C++ sin bloquear el programa, que solo se puede hacer usando múltiples hilos. – mreichelt

2

Las funciones normales de reposo de Linux (usleep, etc.) bloquearán el hilo que las llama. Depende de ti qué hilo es, con suerte no el de UI.

Un enfoque de estilo más androide sería configurar un evento para que ocurra en el futuro y luego regresar del evento actual. Cuando el nuevo evento se dispara, dar el siguiente paso. Piénsese, por ejemplo, en una máquina de estado en la que cada estado se ingresa como un evento, se hace algo instantáneamente efectivo, se programa el próximo estado para un tiempo futuro y luego se regresa.

6

Volviendo commment @mreichelt en una respuesta:

Sí hay una función sleep(seconds).

1.Add #include <unistd.h>

  1. Llamar: sleep(seconds) o usleep(microseconds)

nota: Un microsegundo (nosotros o letra griega mu plus s) es una millonésima (10 -6) de un segundo, mientras que un milisegundo (ms o ms) es una milésima de segundo

1

SÍ está definido en unistd.h Pero tenga cuidado con la función de reposo no está estandarizada, por lo tanto, en el modo de reposo de Windows definido en ` en las ventanas

sleep(int millisenconds); 

en linux`

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

usleep toma microsegundos donde el sueño toma segundos. 1 segundo = 1 * 1000 * 1000