Linux setitimer函数的操作技巧

2016-02-19 14:37 10 1 收藏

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐Linux setitimer函数的操作技巧,赶紧看过来吧!

【 tulaoshi.com - Linux教程 】

Linux系统使用setitimer函数能够事项高精度的定时功能,用于定时执行function,下面图老师小编将针对setitimer函数的用法给大家做个详细介绍,一起来了解下吧。

 Linux setitimer函数的操作技巧

说明: setitimer一个进程中只能有一个 下一个会覆盖前一个的定时 想一个进程多个定时器只能自己实现。

setitimer() 不支持在同一进程中同时使用多次以支持多个定时器。

linux有关定时器(setitimer)的叙述是这样的:

linux系统给每个进程提供了3个定时器,每个定时器在各自不同的域里面计数。当任何一个timer计数到结束了,系统就发送一个信号(signal)给该进程,同时计数器重置。

一共支持以下3中计数器形式:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

ITIMER_REAL 在real time中计数器减1,然后等计数往比后发送SIGALRM信号。

ITIMER_VIRTUAL 当进程在执行的过程中计数,然后当计数完毕后发送SIGVTALRM信号给该进程。

ITIMER_PROF 在该进程被执行和系统在代表该进程执行的时间都进行计数

功能描述:

获取或设定间歇计时器的值。系统为进程提供三种类型的计时器,每一类以不同的时间域递减其值。当计时器超时,信号被发送到进程,之后计时器重启动。

用法:

#include 《sys/time.h》

int getitimer(int which, struct itimerval *value);

int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue);

参数:

which:间歇计时器类型,有三种选择

ITIMER_REAL //数值为0,计时器的值实时递减,发送的信号是SIGALRM。

ITIMER_VIRTUAL //数值为1,进程执行时递减计时器的值,发送的信号是SIGVTALRM。

ITIMER_PROF //数值为2,进程和系统执行时都递减计时器的值,发送的信号是SIGPROF。

value,ovalue:时间参数,原型如下

struct itimerval

{

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

struct timeval it_interval;

struct timeval it_value;

};

struct timeval

{

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

long tv_sec;

long tv_usec;

};

getitimer()用计时器的当前值填写value指向的结构体。

setitimer()将value指向的结构体设为计时器的当前值,如果ovalue不是NULL,将返回计时器原有值。

返回说明:

成功执行时,返回0。失败返回-1,errno被设为以下的某个值

EFAULT:value或ovalue是不有效的指针

EINVAL:其值不是ITIMER_REAL,ITIMER_VIRTUAL 或 ITIMER_PROF之一

#include 《stdio.h》

#include 《unistd.h》

#include 《signal.h》

#include 《string.h》

#include 《sys/time.h》

#include 《errno.h》

void PrintMsg(int Num)

{

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

printf(%s/n, Hello World);

return;

}

int main(int argc, char* argv[])

{

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

signal(SIGALRM, PrintMsg);

struct itimerval tick;

tick.it_value.tv_sec = 10; //十秒钟后将启动定时器

tick.it_value.tv_usec = 0;

tick.it_interval.tv_sec =1; //定时器启动后,每隔1秒将执行相应的函数

tick.it_interval.tv_usec = 0;

//setitimer将触发SIGALRM信号

int ret = setitimer(ITIMER_REAL, &tick, NULL);

if ( ret != 0)

{

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

printf(Set timer error. %s /n, strerror(errno) );

return -1;

}

printf(Wait!/n);

getchar();

return 0;

}

上面就是Linux中setitimer函数的用法介绍了,setitimer函数拥有三种类型计时器选择,为了达到更高精度的定时,还是选择setitimer函数比较好。

来源:http://www.tulaoshi.com/n/20160219/1607373.html

延伸阅读
标签: 服务器
Linux必学的网络操作命令   因为Linux系统是在Internet上起源和发展的,它与生俱来拥有强大的网络功能和丰富的网络应用软件,尤其是TCP/IP网络协议的实现尤为成熟。Linux的网络命令比较多,其中一些命令像ping、ftp、telnet、route、netstat等在其它操作系统上也能看到,但也有一些Unix/Linux系统独有的命令,如ifconfig、finger、mai...
不论你在运行什么操作系统,在很多情况下,你会面对灾难恢复操作。你的主引导区被覆盖,你的硬盘不能启动,或者一个重要的文件被删除,或者你的显示卡启动时闪烁一下就黑屏了。本文会就这些问题作一些技巧性的讨论,帮助你在遇到这些问题时,不致于手足无措。 首先需要的是一张应急启动软盘,在安装 Linux 时,一般会要求建立一张的...
标签: 电脑入门
Bash是Bourne-Again SHell的缩写,是许多Linux平台内定的shell,其实Bash命令有许多操作技巧,很多初学者可能还不知道,掌握这些技巧能够更快的完成工作,一起来学习下吧。 t ab键补全用法 当我们敲击一下tab补全命令或文件名 当我们敲击两下tab 列出相关的所有可选项 cd - 相当于电视的回看 有时候我们进入一个非常长的目录,后来...
数据操作相关函数笔记 1,数组复制函数 System.arraycopy() System.arraycopy(源数组,0,目标数组,0,复制长度) 示例: public class TestArrCopy {    public static void main(String[] args)       {          int ia[]=new i...
标签: 服务器
linux环境编程-ftok()函数详解   系统建立IPC通讯(如消息队列、共享内存时)必须指定一个ID值。通常情况下,该id值通过ftok函数得到。 ftok原型如下: key_t ftok( char * fname, int id ) fname就时你指定的文件名(该文件必须是存在而且可以访问的),id是子序号, 虽然为int,但是只有8个比特被使用(0-255)。 当...

经验教程

967

收藏

37

精华推荐

javascript操作dom的一些函数

javascript操作dom的一些函数

柠檬with樱桃

Linux软件raid操作指南

Linux软件raid操作指南

你在做天也在看

linux字符操作界面基础

linux字符操作界面基础

喔只想简简单单

微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部