linux定时器的实现方法
- struct timer_list
- {
- struct list_head list;
- unsigned long expires;
- unsigned long data;
- void (*function)(unsigned long);
- };
list 实现的时候使用的,和定时器功能无关
expires 是定时器定时的滴答数(当前的滴答数为 jiffies )
function 到那个时刻内核调用的函数
data 由于可能多个定时器调用一个函数,为了使得这个函数能够区分不同的定时器,
通过在结构中 data 来标识这个定时器,并且通过调用
function( data )
使得 function 能区分它们,也就是 data 起到 ID 的作用。
如何使用
将定时器加到定时器队列中
- void add_timer(struct timer_list *timer)
修改定时器的到期时间
- int mod_timer(struct timer_list *timer, unsigned long expires)
将定时器删除(以后这个定时器将不再起作用)
- int del_timer(struct timer_list * timer)
- #include <stdio.h>
- #include <unistd.h>
- #include <signal.h>
- void sigalrm_fn(int sig)
- {
- printf("alarm!\n");
- alarm(2);
- return;
- }
- int main(void)
- {
- signal(SIGALRM,signalrm_fn);
- alarm(2);
- while(1)
- pause();
- }
- #include <stdio.h>
- #include <time.h>
- #include <sys/time.h>
- #include <stdlib.h>
- #include <signal.h>
- int count = 0;
- void set_timer()
- {
- struct itimerval itv, oldtv;
- itv.it_interval.tv_sec = 5;
- itv.it_interval.tv_usec = 0;
- itv.it_value.tv_sec = 5;
- itv.it_value.tv_usec = 0;
- setitimer(ITIMER_REAL, &itv, &oldtv);
- }
- void sigalrm_handler(int sig)
- {
- count++;
- printf("timer signal.. %d\n", count);
- }
- int main()
- {
- signal(SIGALRM, sigalrm_handler);
- set_timer();
- while (count < 1000)
- {}
- exit(0);
- }
- Server:: Server(QWidget *parent) : QWidget(parent)
- {
- readTimer = new QTimer(this); //创建并启动定时器
- connect(readTimer, SIGNAL(timeout()), this, SLOT(slotReadFile())); //每当定时器超时时调用函数slotReadFile读取文件
- readTimer->start(100);
- }
- int Server::slotReadFile() // 消息读取和处理函数
- {
- readTimer->stop(); //暂时停止定时器计时
- ret = read(file, buf ); //读取文件
- if(ret == NULL)
- { readTimer->start(100); //当没有新消息时,重新启动定时器
- return(-1);
- }
- else
- 根据buf中的内容将消息分发给各个相应的对象处理……;
- readTimer->start(100); //重新启动定时器
- }
linux定时器的实现方法的更多相关文章
- Linux 定时器应用【转】
Linux 定时器应用 实验目的 阅读 Linux 相关源代码,学习 Linux 系统中的时钟和定时器原理,即,ITIMER_REAL实时计数,ITIMER_VIRTUAL 统计进程在用户模式执行的时 ...
- 嵌入式linux应用程序移植方法总结
嵌入式linux应用程序移植方法总结 前段时间一直在做openCapwap的移植和调试工作,现在工作已接近尾声,编写本文档对前段工作进行一个总结,分享下openCapwap移植过程中的经验和感悟.江浩 ...
- 1008win7与虚拟机中的linux共享文件的(详细)方法
转自http://jingyan.baidu.com/article/ca00d56c74dde4e99eebcfd2.html 好东西一起分享 win7与虚拟机中的linux共享文件的(详细)方法 ...
- 修改linux系统时间的方法(date命令)
修改linux系统时间的方法(date命令) 来源:互联网 作者:佚名 时间:11-18 23:22:27 [大 中 小] date命令不仅可以显示系统当前时间,还可以用它来修改系统时间,下面简单的介 ...
- Linux下软件安装方法即路径设置
Linux下软件安装方法即路径设置 http://www.cnblogs.com/edward259/archive/2010/07/02/1770066.html
- 截取linux文件存储路径方法
1.截取linux文件存储路径方法 package com.tydic.eshop.action.freemarker; public class dddd { public static void ...
- linux php安装扩展方法 查找配置文件
如何在linux中查看nginx.apache.php.mysql配置文件路径了,如果你接收一个别人配置过的环境,但没留下相关文档.这时该怎么判断找到正确的加载文件路径了.可以通过以下来判断 1.判断 ...
- linux定时器用法
linux定时器 原文出自http://www.cnblogs.com/processakai/archive/2012/04/11/2442294.html 今天看书看到了关于alarm的一些用法 ...
- Linux 常用命令使用方法大搜刮
Linux 常用命令使用方法大搜刮 1.# 表示权限用户(如:root),$ 表示普通用户 开机提示:Login:输入用户名 password:输入口令 用户是系统注册用户成功登陆后,可以进入 ...
随机推荐
- NodeJS添加Jquery依赖
NodeJS使用时有时候需要JQuery依赖. 新版正确的依赖方式 var jsdom = require('jsdom'); const {JSDOM} = jsdom; const {docume ...
- 转 Pytorch 教学资料
本文收集了大量PyTorch项目(备查) 转自:https://blog.csdn.net/fuckliuwenl/article/details/80554182 目录: 入门系列教程 入门实例 图 ...
- 一些个人认为特别的安卓 App 介绍
MoboPlayer (一款息屏也能播放视频的 App) 快图浏览(快速列出手机中的图片和视频,小巧且不会申请安卓各种权限)
- pytest_demo_实战2_fixture应用
1.py文件所在文件夹下创建 __init__.py 文件 2.文件夹目录下:创建conftest.py import pytest # @pytest.fixture() 里面没有参数,那么默认sc ...
- C#工具类MySqlHelper,基于MySql.Data.MySqlClient封装
源码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syst ...
- layui 在页面弹出小窗口,并关闭
function showdialog() { layer.open({ type: 2, title: '发起调度', shadeClose: true, shade: 0.8, area: [ ...
- .Net IOC框架入门之——CastleWindsor
一.简介 Castle是.net平台上的一个开源项目,为企业级开发和WEB应用程序开发提供完整的服务,用于提供IOC的解决方案.IOC被称为控制反转或者依赖注入(Dependency Injectio ...
- babel plugin和presets是什么,怎么用?
https://www.fullstackreact.com/articles/what-are-babel-plugins-and-presets/ 当开发react或者vuejs app时,开发者 ...
- P2995 [USACO10NOV]牛的照片(树状数组,逆序对)
题目: P2995 [USACO10NOV]牛的照片Cow Photographs P4545 [USACO10NOV]奶牛的图片Cow Photographs SP7809 COWPIC - Cow ...
- 修改Nginx配置参数解决http状态码:413上传文件大小限制问题
修改Nginx上传文件大小限制 我们使用ngnix做web server的时候,nginx对上传文件的大小有限制,默认是1M. 当超过大小的时候会报413(too large)错误.这个时候我们要修改 ...