正如标题所说,如何从另一个线程中取消阻塞调用,例如select()或(在串行通信和类似情况下)read()?解决这类事情的传统方式是什么?我想可以使用一个小的超时,这可能会很好,但这对我来说似乎有些黑客。
答案 0 :(得分:3)
中断select(2)
的传统方式是self-pipe trick
。通过使描述符非阻塞和处理EAGAIN
可以更好地满足输入/输出调用。
答案 1 :(得分:0)
在这些情况下,你应该使用一个小的或立即超时,并有额外的逻辑来处理下次选择/读取尝试的时间/方式/原因。