nanosleep() -- 更精确的延迟 -----一个使用用例

时间:2023-02-01 23:23:31

[常规] nanosleep() -- 更精确的延迟

[复制链接]

   
nanosleep() -- 更精确的延迟            -----一个使用用例

4220

主题

5152

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

nanosleep() -- 更精确的延迟            -----一个使用用例nanosleep() -- 更精确的延迟            -----一个使用用例

积分
30607
电梯直达nanosleep() -- 更精确的延迟            -----一个使用用例

楼主

nanosleep() -- 更精确的延迟            -----一个使用用例 发表于 2010-8-22 00:08:53 | 只看该作者 nanosleep() -- 更精确的延迟            -----一个使用用例
原型:

#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);

说明:
此函数将调用进程挂起,直到 req 里所指的时间结束。req 是 struct timespec 结构体的指针。struct timespec 结构体定义如下:

struct timespec {
   time_t tv_sec;        /* 秒 */
   long   tv_nsec;       /* 纳秒 */
};

如果在调用 nanosleep() 睡眠期间被信号所中断,nanosleep() 就会返回 -1,同时设置 errno 为 EINTR,并且会将剩余的时间写入由 rem 所指向同样时 struct timespec 类型的结构体中,如果 rem 为 NULL,就不会记录剩余时间。当信号处理完毕时,还会继续调用 nanosleep() 直到剩余时间用完为止。

测试程序:

;
     )
     ;
);
     );
      );
;
     ;
     ) );
     );
}

运行与输出:

$ ./nanosleep 
5
testing-1
testing-2
^C测试-2被信号中断,剩余时间为: 4秒120263116纳秒
^C测试-2被信号中断,剩余时间为: 3秒440359866纳秒
^C测试-2被信号中断,剩余时间为: 2秒320431341纳秒
^C测试-2被信号中断,剩余时间为: 1秒320495448纳秒
testing-3
... ...

上面,^C 表示按下 Ctrl + c 组合键,发出中断函数信号。

 from:http://www.groad.net/bbs/thread-2621-1-1.html