Linux下的定时器

Linux下的定时器

ID:37711027

大小:30.17 KB

页数:10页

时间:2019-05-29

Linux下的定时器_第1页
Linux下的定时器_第2页
Linux下的定时器_第3页
Linux下的定时器_第4页
Linux下的定时器_第5页
资源描述:

《Linux下的定时器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、简介这篇文章主要记录我在试图解决如何尽可能精确地在某个特定的时间间隔执行某项具体任务时的思路历程,并在后期对相关的API进行的归纳和总结,以备参考。问题引出很多时候,我们会有类似“每隔多长时间执行某项任务”的需求,乍看这个问题并不难解决,实则并不容易,有很多隐含条件需要考虑,诸如:时间精度是多少?时间是否允许出现偏差,允许的偏差是多少,偏差之后如何处理?系统的负载如何?这个程序允许占用的系统资源是否有限制?这个程序运行的硬件平台如何?为了便于分析,我们锁定题目为“每隔2妙打印当前的系统时间(距离UNIX纪

2、元的秒数)”。基于sleep的朴素解法看到这个题目,我想大家的想法和我一样,都是首先想到类似这样的解法:#include int main(int argc, char *argv[]){        while (1) {                printf("%d", time(NULL));                sleep(2);        }        return 0;}如果对时间精度要求不高,以上代码确实能工作的很好。因为sleep的时间精度只

3、能到1s:       #include        unsigned int sleep(unsigned int seconds);所以对于更高的时间精度(比如说毫秒)来说,sleep就不能奏效了。如果沿着这个思路走下去,还分别有精确到微妙和纳秒的函数usleep和nanosleep可用:      #include        int usleep(useconds_tusec);   Feature Test MacroRequirements for 

4、glibc (seefeature_test_macros(7)):       usleep(): _BSD_SOURCE 

5、

6、 _XOPEN_SOURCE >= 500      #include        int nanosleep(const struct timespec *req, struct timespec *rem);   Feature Test MacroRequirements for glibc (seefeature_test_macros(7)):   

7、    nanosleep(): _POSIX_C_SOURCE >= 199309L既然有了能精确到纳秒的nanosleep可用,上面的较低精度的函数也就可以休息了。实际上在Linux系统下,sleep和usleep就是通过一个系统调用nanosleep实现的。用带有超时功能的API变相实现睡眠如果开发者不知道有usleep和nanosleep,这个时候他可能会联想到select类的系统调用:     AccordingtoPOSIX.1-2001*/       #include 

8、t.h>       /*Accordingtoearlierstandards*/       #include        #include        #include        int select(int nfds, fd_set *readfds, fd_set *writefds,                  fd_set *exceptfds, struct timeval *timeout);      

9、#include        int poll(struct pollfd *fds, nfds_tnfds, int timeout);       #include        int epoll_wait(int epfd, struct epoll_event *events,                      int maxevents, int timeout);       int epoll_pwait(int epfd, struct

10、 epoll_event *events,                      int maxevents, int timeout,                      const sigset_t *sigmask);从函数原型和相关手册来看,poll和epoll_wait能提供的时间精度为毫秒,select比他们两个略胜一筹,为微秒,和前述的usleep相当。但是,果真如此么?这需要我们深入到Linux的具体

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。