c - 使用 sleep 和 select 信号

标签 c signals sleep select-function

我想使用 select() 函数等待 1 秒,因为我的程序使用信号来控制东西,所以 sleep() 会过早返回。奇怪的是,当使用 select() 时,它也会过早地返回。

我是这样调用select的

struct timeval timeout;    
timeout.tv_sec = 10;  
timeout.tv_usec = 1000000; 
select (0 ,NULL, NULL, NULL, &timeout);

但是每当信号到达时,它就会返回(我正在为信号使用纳秒计时器)

谁知道为什么?

最佳答案

尝试这样的事情:

struct timespec timeout;
timeout.tv_sec = 10;
timeout.tv_nsec = 0;
while (nanosleep(&timeout, &timeout) && errno == EINTR);

指向 nanosleep 的“剩余时间”指针将负责让您在 sleep 被打断时以必要的剩余时间重新开始 sleep 。

关于c - 使用 sleep 和 select 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5198560/

相关文章:

qt - Qt中事件和信号有什么区别

Bash,评估中的 CTRL+C 不会中断主脚本

java - 等待调用 invokeLater()

c - 如何在 C 中跨线程进行动态数据传输和内存管理?

c - select() 和 C 上带有动态缓冲区的非阻塞 recv

c - 单节点列表练习(无法正常工作)

c - c 中的指针没有得到正确的输出

python Pool result.get() block 信号处理程序

c - 如何降低C语言中的CPU利用率

c - 使用 Windows 的 Sleep() 时 GTK 窗口停止