c - 为什么使用 select() 而不是 sleep()?

标签 c multithreading posix

我正在阅读有关 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/

相关文章:

python - 子进程中的父记录器

c编程制作电话簿输入输出和排序

c - 链表令人困惑

c# - 调用 Web 服务异步

java - 我的应用程序卡住,如何在其中实现线程?

python - 为什么使用 Python mmap 模块比从 C++ 调用 POSIX mmap 慢得多?

c - 如何使用 Eclipse 将额外的源代码添加到导入的现有 makefile 项目中?

C 预处理器宏 : compacting code based on a single variance

multithreading - VB6 的线程模型是什么?

c - 终端访问控制问题