我将audio混音器从Windows上的directsound移植到Linux上的alsa。 我使用系统调用“poll”轮询16个文件描述符。 现在我需要能够以某种方式中止投票。 在Windows上,我正在使用WaitForMultipleObjects使用事件,当我需要中止等待,我只是SetEvent的事件之一导致等待返回。 有没有办法在Linux中标记一个文件描述符“准备就绪”,以便轮询返回?
我看了ppoll,但我不熟悉信号,我不想处理不必要的竞争条件。 我的意思是,如果alsa可以设置文件描述符为“准备好”,我应该也可以;)
MessageBox“exception程序终止”让我的应用程序继续运行
取消长时间运行下载
如何以编程方式在C / C ++中导致核心转储
最后在调用Thread.Abort时不会执行
如果使用pipe()函数创建pipe() ,则可以将输出端添加到poll()列表中。 然后你可以在管道的输入端写入一些东西,你的轮询将返回。 很像你的Windows版本。
你需要使用像线程或信号处理程序异步的东西来使这个工作。
另一个选择是使用sigaction()来设置没有 SA_RESTART标志的信号处理程序。 您可以使用一个未使用的信号,如SIGUSR1或其中一个实时信号。 当你想中断poll()你发送这个信号, poll()将返回-1,errno设置为EINTR。
除非你使用sigmask()来阻塞不需要的信号,否则不同的信号也可能中断你的poll() 。
使用超时并检查退出条件。
while (not exit_condition): int poll(struct pollfd *fds,nfds_t nfds,int timeout);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。