1

我正在研究一个 pthread 多线程代码,每个线程都在文件描述符上调用 read()。read() 是一个阻塞调用,因此它等待数据。但我希望它只等待 3 秒来等待数据。

我曾想过使用alarm() 和hadling SIGALRM,但如果我在一个线程中发出警报,所有线程都会收到该SIGALRM 信号,并且所有线程都将放弃读取。我该怎么做?

4

1 回答 1

5

为此使用select电话。它有一个参数允许您指定超时。

Linux 手册页select有一个示例用法,您可以在此处和网络上的其他地方找到很多示例。

如果您不担心便携性,还有更多现代/功能丰富的选项。

您可能想研究库以将所有这些抽象出来。libevent值得一看,它封装了上述大多数特定于操作系统的接口。

于 2012-04-15T06:18:08.490 回答