我正在阅读有关 iPhone 音频的一章,遇到了一段我无法理解的代码:
while (aqc.playPtr < aqc.sampleLen)
{
select(NULL, NULL, NULL, NULL, 1.0);
}
(Full code sample is on pages 163-166)。据我对代码的理解,音频正在另一个线程上处理,而 while 循环只是为了防止主线程在音频仍在处理时终止。
我不明白的是为什么要使用 select()
而不是 sleep()
。
根据我的阅读,select()
用于监视 I/O 的变化,将 NULL 传递给它没有任何意义。我使用 sleep()
运行代码,它按预期工作。 (我对低级 POSIX 的了解几乎不存在。)
最佳答案
选择允许准确的亚秒级等待,并且比 sleep 更便携。还有其他等待方式,见this question .
但是select的timeout参数不应该是float而是指向struct timeval的指针。我很惊讶你展示的代码甚至可以编译。更多:这个奇怪的条件选择之后是无条件 sleep (1)。在我看来毫无意义。
关于c - 为什么使用 select() 而不是 sleep()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3125645/