我正在学习关于iPhone音频的章节,遇到了一段我看不懂的代码:
while (aqc.playPtr < aqc.sampleLen)
{
select(NULL, NULL, NULL, NULL, 1.0);
}
(完整的代码示例在163-166页)。从我对代码的理解来看,音频正在另一个线程上进行处理,而while循环只是为了防止主线程在音频仍在处理时终止。
我不明白的是为什么要使用
select()
而不是sleep()
。据我所了解,
select()
用于监视I/O的变化,并传递NULL没有任何有意义的作用。我已经使用sleep()
运行了代码,并且它按预期工作。(我对低级POSIX的了解几乎不存在。)
struct timeval
的指针作为参数时,传递一个double
类型的参数并不像看起来那么可怕。请您放心,这并不会导致代码崩溃或其他严重问题。 - JeremyPnanosleep
就已经被纳入了 POSIX 标准,已经有16年的历史了。它有一种明确定义的策略来处理信号,而select
没有。一个尚未更新到该标准的 POSIX 系统应该被丢弃。 - Jens Gustedt