estoy trabajando a través de un capítulo sobre el iPhone de audio y he encontrado una sección de código que no puedo dar sentido a:¿Por qué usar select() en lugar de sleep()?
while (aqc.playPtr < aqc.sampleLen)
{
select(NULL, NULL, NULL, NULL, 1.0);
}
(Full code sample is on pages 163-166). Por lo que entiendo del código, el audio se está procesando en otro hilo y el ciclo while está ahí para evitar que el hilo principal termine mientras el audio todavía se está procesando.
Lo que no entiendo es por qué select()
se está utilizando en lugar de sleep()
.
De lo que he leído select()
se usa para controlar los cambios en E/S y pasarlo NULLs no hace nada significativo. He ejecutado el código usando sleep()
y funciona como se esperaba. (Mi conocimiento de bajo nivel POSIX es casi inexistente.)
scary. No sabía que la gente todavía usa ese viejo truco. Y esto en una arquitectura aparentemente nueva y brillante donde muchos otros medios para 'dormir' deberían estar disponibles. vergüenza en el programador/escribir de tal código. –
@JensGustedt no es tan aterrador como pasar un 'doble' como parámetro cuando la función espera un ** puntero ** a una' struct timeval' – JeremyP
@JensGustedt Esta es una forma muy segura de dormir, porque el sueño() puede no trabajo, por ejemplo en un controlador de señal. – LubosD