Я работаю через главу о iPhone аудио и наткнулся раздел кода, который я не могу понять смысл:Зачем использовать select() вместо sleep()?
while (aqc.playPtr < aqc.sampleLen)
{
select(NULL, NULL, NULL, NULL, 1.0);
}
(Full code sample is on pages 163-166). Из того, что я понимаю в коде, аудио обрабатывается в другом потоке, и цикл while находится там, чтобы предотвратить прерывание основного потока, пока звук все еще обрабатывается.
Я не понимаю, почему select()
используется вместо sleep()
.
Из того, что я читал select()
, используется для мониторинга изменений ввода-вывода и передачи его. NULL не делает ничего значимого. Я запустил код с помощью sleep()
, и он работает так, как ожидалось. (Мое знание низкого уровня POSIX практически несуществующее.)
страшно. Я не знал, что люди все еще используют этот старый трюк. И это на кажущейся новой и блестящей архитектуре, где должно быть доступно много других средств для «сна». стыд за программиста/запись такого кода. –
@JensGustedt не так страшно, как передача «double» в качестве параметра, когда функция ожидает ** указателя ** на 'struct timeval' – JeremyP
@JensGustedt. Это на самом деле очень безопасный способ сна, потому что sleep() может не работа, например в обработчике сигналов. – LubosD