Ben*_*hen 15 c multithreading posix
我正在编写一个关于iPhone音频的章节,并且遇到了一段我无法理解的代码:
while (aqc.playPtr < aqc.sampleLen)
{
select(NULL, NULL, NULL, NULL, 1.0);
}
Run Code Online (Sandbox Code Playgroud)
(完整代码示例在第163-166页).根据我对代码的理解,音频正在另一个线程上处理,而while循环就是为了防止主线程在音频仍在处理时终止.
我不明白的是为什么select()要用来代替sleep().
从我所读到select()的用于监视I/O的变化并传递它的NULL并没有做任何有意义的事情.我已经运行了代码sleep(),它按预期工作.(我对低级别POSIX的了解几乎不存在.)
那么,睡眠(3)可以通过使用信号来实现.这取决于平台.
当您使用select(2)和poll(2)时,您知道不会涉及任何信号,这通常非常有用.例如,如果你正在使用alarm(2),你也不应该使用sleep(3),因为"混合调用警报和睡眠是一个坏主意"(根据手册页.)
此外,select和poll在睡眠时会给你毫秒级的粒度,但是睡眠只有几秒钟的粒度.
| 归档时间: |
|
| 查看次数: |
16448 次 |
| 最近记录: |