Почему выбор использования () вместо сна ()?

Я работаю через главу об аудио iPhone и столкнулся с разделом кода, который я не могу понять:

while (aqc.playPtr < aqc.sampleLen) 
{
    select(NULL, NULL, NULL, NULL, 1.0);
}

(Полный пример кода находится на страницах 163-166). Из того, что я понимаю кода, аудио обрабатывается на другом потоке, и цикл с условием продолжения состоит в том, чтобы просто там препятствовать тому, чтобы основной поток завершился, в то время как аудио все еще обрабатывается.

То, что я не понимаю, то, почему select() используется вместо sleep().

Из того, что я читал select() используется для наблюдения изменений во вводе-выводе, и передача его АННУЛИРУЕТ, не делает ничего значимого. Я имею, выполнил использование кода sleep() и это работает как ожидалось. (Мое знание низкого уровня POSIX является почти несуществующим.)

15
задан Benedict Cohen 26 June 2010 в 22:06
поделиться

3 ответа

Select позволяет ждать с точностью до субсекунды и является более переносимым, чем sleep. Есть и другие способы ожидания, см. этот вопрос.

Но параметр таймаута select должен быть не float, а указателем на struct timeval. Я удивлен, что код, который вы показываете, вообще компилируется. Более того : за этим странным условным select следует безусловный sleep(1). По-моему, бессмысленно.

19
ответ дан 1 December 2019 в 01:38
поделиться

Использование select () с NULL rfds , wfds и efds является идиоматический способ портативного сна с субсекундным разрешением.

11
ответ дан 1 December 2019 в 01:38
поделиться

Нет никаких причин делать это. Нет причин и для Sleep(). Всегда нужно ожидать хотя бы одного события - запроса на завершение работы программы.

-4
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: