2010-07-01 65 views

Respuesta

24

sleep (3) es un método de biblioteca estándar posix que intenta suspender el hilo de llamada durante el tiempo especificado en segundos. usleep (3) hace lo mismo, excepto que toma un tiempo en microsegundos. Ambos se implementan con la llamada al sistema nanosleep (2).

El último método hace lo mismo, excepto que es parte del marco de Foundation en lugar de ser una llamada de biblioteca C. Se necesita un NSTimeInterval que represente la cantidad de tiempo que se debe dormir como un doble indicando segundos y fracciones de segundo.

Para todos los efectos, todos hacen funcionalmente lo mismo, es decir, intentan suspender el hilo de llamada durante un período de tiempo especificado.

19

¿Cuál es la mejor condición para usar estos métodos?

Nunca

O, en realidad, más o menos casi con toda seguridad nunca fuera de la más singular de las circunstancias.

¿Qué estás tratando de hacer?

+9

¡Pero Bill, encuentro que dormir por unos nanosegundos aquí y allá borra todos mis inexplicables bloqueos EXC_BAD_ACCESS! –

+7

Heh.Crie el tiempo veo código que usa 'usleep()' para fines de "sincronización de hilos". Mis músculos adormecidos están tristemente doloridos. – bbum

+1

Sé exactamente lo que quieres decir. En este caso, esperaba ejercitar los músculos de la sonrisa en lugar de la vergüenza :) –

3

En la mayoría de los sistemas operativos, Sleep (0) y sus variantes se pueden utilizar para mejorar la eficiencia en una situación de votación para dar la oportunidad de que otros subprocesos funcionen hasta que el planificador de subprocesos active el hilo de sondeo. Es mejor que un ciclo while. Sin embargo, no he encontrado mucho uso para un tiempo de espera distinto de cero, y Apple en particular ha hecho un buen trabajo construyendo una arquitectura impulsada por eventos que debería eliminar la necesidad de sondeos en la mayoría de las situaciones de todos modos.

-1

- Ejemplo de uso de sueño se encuentra en el siguiente estado:

En red escenario de simulación, por lo general tienen eventos que se ejecutan caso por caso, el uso de un programador. El programador ejecuta eventos de forma ordenada. Cuando un evento se termina de ejecutar y el planificador pasa al siguiente evento, el planificador compara el tiempo de ejecución del siguiente evento con el reloj de la máquina. Si el próximo evento está programado para un tiempo futuro, el simulador duerme hasta que se llegue a ese tiempo real y luego ejecuta el siguiente evento.

-Desde Linux hombre páginas:

El función usleep() suspende la ejecución del subproceso de llamada para (al menos) usec microsegundos. La suspensión puede alargarse levemente por cualquier actividad del sistema o por el tiempo empleado en procesar la llamada o por la granularidad de los temporizadores del sistema. while sleep está retrasando la ejecución de una tarea (podría ser un hilo o algo así) por algún tiempo. Consulte 1 y 2 para obtener más detalles sobre las funciones.

Cuestiones relacionadas