技术标签: linux定时器统计进程运行时间
点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~文章首发公众号—— Pou光明
程序中难免会使用到定时器,今天给大家介绍Linux中一种定时器的实现。Linux下还有很多其他定时的实现,如精确定时等,感兴趣的同志可以再做深入了解。
编程到现在,其实很多工作都是在调用api,还没能完全脱离面向“谷歌”编程的实质,面对这种情形,如何破局呢?好巧啊,我也在思考。。。。。。
一、api简介
NAMEtimerfd_create, timerfd_settime, timerfd_gettime -通过文件描述符来告知定时器状态。SYNOPSIS#include int timerfd_create(int clockid, int flags);int timerfd_settime(int fd, int flags,const struct itimerspec *new_value,struct itimerspec *old_value);int timerfd_gettime(int fd, struct itimerspec *curr_value);
timerfd_create()
创建一个新的计时器对象,并返回对应的文件描述符。 clockid参数指定用于标记计时器进度的时钟,并且必须为CLOCK_REALTIME或CLOCK_MONOTONIC。CLOCK_REALTIME是可设置的系统范围时钟。CLOCK_MONOTONIC是不可设置的时钟。具体区别,感兴趣的同志自行验证。
timerfd_settime()
启动或关闭定时器。
new_value参数指定计时器的初始到期时间和间隔。用于此参数的itimer结构包含两个字段,每个字段依次是timespec类型的结构:
struct timespec {
time_t tv_sec; /* Seconds */
long tv_nsec; /* Nanoseconds */
};
struct itimerspec {
struct timespec it_interval; /* Interval for periodic timer */
struct timespec it_value; /* Initial expiration */
};
二、用例及封装函数
1、 根据时间间隔创建定时器
static int32_t TimerStart(uint64_t interval_ms){int32_t timerfd = 0;struct itimerspec its = {0};struct itimerspec itsTest = {0};timerfd = timerfd_create(CLOCK_MONOTONIC, 0);if (timerfd < 0){return -1;}/* Start the timer */its.it_value.tv_sec = interval_ms / 1000;its.it_value.tv_nsec = (interval_ms % 1000) * 1000000;its.it_interval = its.it_value;// if (timerfd_settime(timerfd, 0, &its, NULL) < 0)if (timerfd_settime(timerfd, TFD_TIMER_ABSTIME, &its, NULL) < 0){close(timerfd);return -1;}return timerfd;}
2、通过文件描述符判断定时器是否溢出
static int32_t TimerExpired(int32_t timerfd){uint64_t exp;ssize_t s;s = read(timerfd, &exp, sizeof(uint64_t));if (s != sizeof(uint64_t)){printf("read timerd failed \n");return -1;}return 0;}
3、通过文件描述符销毁定时器
static void TimerStop(int32_t timerfd){close(timerfd);}
4、主测试程序
int main(void){int test = 1;struct itimerspec curr_value = {0};int32_t l_n32TimerFd = TimerStart(1100);printf("l_n32TimerFd is %d \n", l_n32TimerFd);while (1){test++;if (-1 == TimerExpired(l_n32TimerFd)){printf("timer failed !\n");TimerStop(l_n32TimerFd);}timerfd_gettime(l_n32TimerFd, &curr_value);// printf("curr_value is %ld \n", curr_value.it_value.tv_sec);printf("curr_value nsec is %ld \n", curr_value.it_value.tv_nsec);DEBUG("time is arrive 1s count is %d ", test);if (5 == test){struct itimerspec its = {0};/* Stop the timer */its.it_value.tv_sec = 0;its.it_value.tv_nsec = 0;its.it_interval = its.it_value;if (timerfd_settime(l_n32TimerFd, TFD_TIMER_ABSTIME, &its, NULL) < 0){close(l_n32TimerFd);printf("timerfd_settime ailed \n");return -1;}}}}
5、程序运行结果
6、更多第一手英文资料的获取
man timerfd_create
很多我就是翻译了一下。
三、总结时间
如何理解马克思主义哲学中的对立统一 。。。
再增加一个时间戳的调用:
struct timespec t_start, t_end;unsigned long total_us = 0;clock_gettime(CLOCK_MONOTONIC, &t_start);// do someclock_gettime(CLOCK_MONOTONIC, &t_end);total_us = (t_end.tv_sec - t_start.tv_sec) * 1000000 + (t_end.tv_nsec - t_start.tv_nsec) / 1000;DEBUG("time is arrive 1s count is %d %lu us", test, total_us );
获取工程源码可在程序后台留言:“Linux定时器例子”
文章浏览阅读339次。nginx - fastcgi - php - memcache 协同下的 请求的完整访问过程用户发送http请求报文给nginx服务器nginx会根据文件url和后缀来判断请求如果请求的是静态内容,nginx会将结果直接返回给用户; 如果请求的是动态内容,nginx会将请求交给 fastcgi客户端 ,通过 fastcgi_pass 将这个请求发送给 php-fpmphp-fpm 会将请求交给 wrapperwrapper 收到请求会生成新的线程调用 php动态程序解析服务器如果用
文章浏览阅读566次。一、actor对等调度。二、调度流程源码分析:thread_worker()、struct skynet_context、skynet_context_message_dispatch()、dispatch_message()。三、c语言到lua的调用过程分析。_actor公平调度
文章浏览阅读2.4w次,点赞222次,收藏1.1k次。一、自动化分类(1)接口自动化python/java+requests+unittest框架来实现 python/java+RF(RobotFramework)框架来实现——对于编程要求不高(2)Web UI功能自动化python/java+selenium+unittest+ddt+PO框架来实现 python/java+RFS(RobotFrameWork+Selenium)框架来实现——对于编程要求不高(3)App自动化python/java+appnium+unit_接口自动化
文章浏览阅读586次。通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取欠我们一般需要使用hasNext()与hasNextLine()来判断是否还有输入的数据。之前我们学的基本语法中,并没有实现程序和人的交互,但是java给我们提供了这样一个工具类,我们可以获取用户的输入。通过输出结果我们可以明显的看出区别,next方法并不能读取带空格的输入,而nextLine方法可以。java.util.Scanner 是java5的新特征,所以使用Scanner方法需要导入Scanner类。_java扫描器代码
文章浏览阅读240次。这个是为准备考研复试,希望做一个textCNN文本情感分析打语言基础的自学笔记,博主本身本科非计算机专业,如果网友们有幸看见本文,博客中内容如有疏漏,不吝赐教。第6节 类6.1 类定义 和之前所学习的面向对象的语言一样,Python也提供类的概念,同样适用关键字class定义一个类,一个类可以拥有一个对象的属性和方法。具体代码示例如下:class Student: ag..._sethour() takes 1 positional argument but 2 were given
文章浏览阅读5.8k次。RK3399编译调试瑞芯微官方yolov5 C++代码yolov5 C++代码代码地址https://github.com/rockchip-linux/rknpu.git /rknn/rknn_api/example/rknn_yolov5_demorknn 模型使用rknpu/rknn/rknn_api/examples)/rknn_yolov5_demo/model/rk180x/yolov5s_relu_rk180x_out_opt.rknn 地址yolov5s_relu_rk180_yolov9 rk3399
文章浏览阅读205次。我们公司开发的liveweb播放器是可支持H.264/H.265视频播放的流媒体播放器,性能稳定、播放流畅,可支持的视频流格式有RTSP、RTMP、HLS、FLV、WebRTC等,具备较高的可用性。支持h264、h265、AAC、G711等常见音视频格式。支持协议:RTSP、RTMP、HLS、HTTP-FLV、WebSocket-FLV、GB28181、HTTP-TS、WebSocket-TS、HTTP-fMP4、WebSocket-fMP4、MP4、WebRTC。对外提供HTTP API二次开发接口;_h5直接播放rtsp视频
文章浏览阅读640次。使用select语句可以返回一个结果集,而如果需要对结果集中单独的行进行操作,则需要使用游标。优点: 在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL 查询语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定_java游标查询。前面的查询会释放吗
文章浏览阅读1.1k次,点赞3次,收藏4次。云计算现状过去十几年的发展,云计算概念已经被越来越多的技术层、决策层、高级管理层人员所理解并接受,私有云、公有云、混合云的高速发展,使得业务入云已经成为企业数字化转型的的事实标准。企业云计算的落地,利用云计算中心的软件定义存储、软件定义网络、超融合等技术,将数据汇聚到云中心处理,并对云上业务集中管理,提供云原生的能力,为企业带来较高的经济效益,并逐渐降低运维成本。 随着 5G 通信技术的发展,越来越多的实时性强的业务开始兴起,如自动驾、AR/VR、智能家居、工业自动化等,传统的云计算加端业务的集中._边缘站点应用
文章浏览阅读1.9k次。文章目录1 HTML入门1.1 初识HTML1.1.1 概述1.1.2 HTML的组成1)标签2)属性1.2 入门案例1.2.1 初始页面1)创建一个标准的初始化页面2)页面说明1.2.2 案例实现1.3 总结2 基本语法2.1 **关于注释**2.2 关于标签2.2.1 空元素2.2.2 嵌套元素2.2.3 块级和行内1)概念2)div和span2.3 关于属性2.4 特殊字符2.5 总结3 HTML案例-新闻文本3.1 案例效果3.2 案例分析3.2.1 div样式布局3.2.2 文本标签3.3 使用标_java html
文章浏览阅读1.2k次。程序开始前的准备工作:首先要考虑的就是 如何在一个 所有的程序都可以访问到的地方设置sql server 的连接串,因为我正在全力以赴的准备做一个现在的http://www.asp888.net 的aspx版本的站点,如果只是为这个留言版单独做一个conn连接串,未免太。。。,在asp+中MS 抄袭了 jsp 的一些概念和做法,在jsp中有config.xml文件asp+中有con..._asp.net重置留言板
文章浏览阅读3.2k次。在DNF100级更新之后,韩服同步更新了时装市场系统。但这一系统在国服却惨遭阉割,并没有跟随100级版本的脚步一并实装到国服。先让我们回顾一下,这个时装市场是怎么一回事。【入场条件】*在西海岸NPC希尔斯处移动到时装市场频道。* 也可以通过ESC菜单进入[地图]*可以通过时装市场主地图中的NPC希尔兹,达尔比处的菜单打开时装市场,时装观赏,时装展示。[NPC菜单]*时装观赏- 可以点击对应部位购..._dnf时装哪里可以看