文档章节

select实现精确定时器

alon龙武
 alon龙武
发布于 2014/11/17 20:04
字数 158
阅读 802
收藏 3

select实现精确定时器

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
struct timeval { long tv_sec; long tv_usec; } /* seconds and microseconds */


秒级定时器

void sec_sleep(unsigned sec) {
    int err;
    struct timeval tv;
    tv.tv_sec = sec;
    tv.tv_usec = 0;
    do {
           err = select(0, NULL, NULL, NULL, &tv);
    } while (err < 0 && errno == EINTR);
}


毫秒级定时器

void msec_sleep(unsigned long msec) {
    int err;
    struct timeval tv;
    tv.tv_sec = msec / 1000;
    tv.tv_usec = (msec % 1000) * 1000;
    do {
           err = select(0, NULL, NULL, NULL, &tv);
    } while (err < 0 && errno == EINTR);
}


微秒级定时器

void usec_sleep(unsigned long usec) {
    int err;
    struct timeval tv;
    tv.tv_sec = usec / 1000000;
    tv.tv_usec = usec % 1000000;
    do {
        err = select(0, NULL, NULL, NULL, &tv);
    } while (err < 0 && errno == ENTR);
}



© 著作权归作者所有

共有 人打赏支持
上一篇: 1. 简介
下一篇: 5.网际协议版本4
alon龙武
粉丝 2
博文 14
码字总数 20481
作品 0
深圳
程序员
私信 提问
定时器函数setitimer

1.介绍   在linux下如果定时如果要求不太精确的话,使用alarm()和signal()就行了(精确到秒),但是如果想要实现精度较高的定时功能的话,就要使用setitimer函数。   setitimer()为Linux...

B_ice
2016/07/27
14
0
Linux信号处理与时钟

linux下进程间通信的几种主要手段简介: 管道(Pipe)及有名管道(named pipe):无名管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能...

文艺小青年
2017/03/10
0
0
ARM9 + Linux多线程精确的定时器

最近公司有个项目平台是ARM9 + linux, 在开发过程中遇到一个问题: 有一部分CAN通讯,需要250ms定时发送一帧数据包。于是我用select做了一个定时器发送。但是当这个多线程的程序真正跑起来,...

forlinux
2015/05/16
674
0
高精度定时器的使用

tbox内部提供了两种定时器实现:timer和ltimer timer: 高精度版本,采用最小堆实现,复杂度是:O(log(n)) ltimer: 低精度版本,采用linux内核中的timing-wheel算法,复杂度是:O(1) 这里主要...

ruki
2015/12/21
55
0
Linux的timerfd

timerfd是Linux为用户程序提供的一个定时器接口。这个接口基于文件描述符,所以能够被用于select/poll的应用场景。 1. 使用方法 timerfd提供了如下接口供用户使用 timerfd_create int timer...

猜猜我是吧
2015/05/03
155
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊flink的FsStateBackend

序 本文主要研究一下flink的FsStateBackend StateBackend flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/StateBackend.java @PublicEvolvingpublic interface Sta......

go4it
9分钟前
0
0
webpack配置proxyTable时pathRewrite无效的解决方法

webpack配置接口地址代理 在项目开发中,接口联调的时候一般都是同域名下,且不存在跨域的情况下进行接口联调,但是当我们在本地启动服务器后,比如本地开发服务下是 http://localhost:8080 ...

前端小攻略
10分钟前
0
0
安装jenkins

1.下载 wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.155/jenkins.war 2.后续操作和 dubbo 安装类似: (1)复制一份空白的tomcat,重命名为:jenkins-tomcat (2)war包放入t...

狼王黄师傅
18分钟前
1
0
zookeeper配置与使用

一.登录官网下载 不要带后缀的,那是公侧版本,下稳定版,比如3.4.9 二.安装与使用 解压后bin里是启动程序 配置文件:在conf下 复制zoo_sample.cfg改名为为zoo.cfg,打开zoo修改文件...

小兵胖胖
42分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部