iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >linux定时器的使用方法
  • 326
分享到

linux定时器的使用方法

2023-06-17 00:06:00 326人浏览 独家记忆
摘要

这篇文章主要讲解了“linux定时器的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux定时器的使用方法”吧!首先来看看linux操作系统为每一个进程提供的3个内部计时器。IT

这篇文章主要讲解了“linux定时器的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux定时器的使用方法”吧!

首先来看看linux操作系统为每一个进程提供的3个内部计时器。

ITIMER_REAL: 给一个指定的时间间隔,按照实际的时间来减少这个计数,当时间间隔为0的时候发出SIGALRM信号

ITIMER_VIRTUAL: 给定一个时间间隔,当进程执行的时候才减少计数,时间间隔为0的时候发出SIGVTALRM信号

ITIMER_PROF: 给定一个时间间隔,当进程执行或者是系统为进程调度的时候,减少计数,时间到了,发出SIGPROF信号,这个和ITIMER_VIRTUAL联合,常用来计算系统内核时间和用户时间。

用到的函数有:

#include

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

int setitimer(int which, struct itimerval*newvalue, struct itimerval* oldvalue);

strcut timeval

{

long tv_sec;

long tv_usec;

};

struct itimerval

{

struct timeval it_interval;

struct timeval it_value;

};

it_interval用来指定每隔多长时间执行任务, it_value用来保存当前时间离执行任务还有多长时间。比如说, 你指定it_interval为2秒(微秒为0),开始的时候我们把it_value的时间也设定为2秒(微秒为0),当过了一秒, it_value就减少一个为1, 再过1秒,则it_value又减少1,变为0,这个时候发出信号(告诉用户时间到了,可以执行任务了),并且系统自动把it_value的时间重置为it_interval的值,即2秒,再重新计数。

为了帮助你理解这个问题,我们来看一个例子:

#include

#include

#include

#include

#include

static char msg[] = "time is running out\n";

static int len;

// 向标准错误输出信息,告诉用户时间到了

void prompt_info(int signo)

{

write(STDERR_FILENO, msg, len);

}

// 建立信号处理机制

void init_sigaction(void)

{

struct sigaction tact;

tact.sa_handler = prompt_info;

tact.sa_flags = 0;

sigemptyset(&tact.sa_mask);

sigaction(SIGALRM, &tact, NULL);

}

void init_time()

{

struct itimerval value;

value.it_value.tv_sec = 2;

value.it_value.tv_usec = 0;

value.it_interval = value.it_value;

setitimer(ITIMER_REAL, &value, NULL);

}

int main()

{

len = strlen(msg);

init_sigaction();

init_time();

while ( 1 );

exit(0);

}

该程序的ITMER_REAL定时器,每隔2秒钟都会发送一个SIGALRM信号,当主函数接收到了这个信号之后,调用信号处理函数prompt_info在标准错误上输出time is running out这个字符串

对于ITIMER_VIRTUAL和ITIMER_PROF的使用方法类似,当你在setitimer里面设置的定时器为ITIMER_VIRTUAL的时候,你把sigaction里面的SIGALRM改为SIGVTALarm, 同理,ITIMER_PROF对应SIGPROF。

不过,你可能会注意到,当你用ITIMER_VIRTUAL和ITIMER_PROF的时候,你拿一个秒表,你会发现程序输出字符串的时间间隔会不止2秒,甚至5-6秒才会输出一个,至于为什么,自己好好琢磨一下^_^

下面我们来看看用sleep以及usleep怎么实现定时执行任务。

#include

#include

#include

#include

static char msg[] = "I received a msg.\n";

int len;

void show_msg(int signo)

{

write(STDERR_FILENO, msg, len);

}

int main()

{

struct sigaction act;

uNIOn sigval tsval;

act.sa_handler = show_msg;

act.sa_flags = 0;

sigemptyset(&act.sa_mask);

sigaction(50, &act, NULL);

len = strlen(msg);

while ( 1 )

{

sleep(2);

sigqueue(getpid(), 50, tsval);

}

return 0;

}

看到了吧,这个要比上面的简单多了,而且你用秒表测一下,时间很准,指定2秒到了就给你输出一个字符串。所以,如果你只做一般的定时,到了时间去执行一个任务,这种方法是最简单的。

下面我们来看看,通过自己计算时间差的方法来定时:

#include

#include

#include

#include

#include

static char msg[] = "I received a msg.\n";

int len;

static time_t lasttime;

void show_msg(int signo)

{

write(STDERR_FILENO, msg, len);

}

int main()

{

struct sigaction act;

union sigval tsval;

act.sa_handler = show_msg;

act.sa_flags = 0;

sigemptyset(&act.sa_mask);

sigaction(50, &act, NULL);

len = strlen(msg);

time(&lasttime);

while ( 1 )

{

time_t nowtime;

time(&nowtime);

if (nowtime - lasttime >= 2)

{

sigqueue(getpid(), 50, tsval);

lasttime = nowtime;

}

}

return 0;

}

这个和上面不同之处在于,是自己手工计算时间差的,如果你想更精确的计算时间差,你可以把 time 函数换成gettimeofday,这个可以精确到微妙。

上面介绍的几种定时方法各有千秋,在计时效率上、方法上和时间的精确度上也各有不同,采用哪种方法,就看你程序的需要了。

感谢各位的阅读,以上就是“linux定时器的使用方法”的内容了,经过本文的学习后,相信大家对linux定时器的使用方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: linux定时器的使用方法

本文链接: https://www.lsjlt.com/news/286511.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • linux定时器的使用方法
    这篇文章主要讲解了“linux定时器的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux定时器的使用方法”吧!首先来看看linux操作系统为每一个进程提供的3个内部计时器。IT...
    99+
    2023-06-17
  • android定时器的使用方法
    在Android中,可以使用`CountDownTimer`类来创建和使用定时器。以下是使用`CountDownTimer`类的步骤...
    99+
    2023-08-28
    android
  • linux cron 下的定时执行工具使用方法
    本篇内容主要讲解“linux cron 下的定时执行工具使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux cron 下的定时执行工具使用方法”吧!cron是一个linux下的定时...
    99+
    2023-06-13
  • django使用crontab定时的方法
    小编给大家分享一下django使用crontab定时的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!当进行django开发时,通常会做一些特殊的定时任务,如定...
    99+
    2023-06-14
  • vue页面使用多个定时器的方法
    本文实例为大家分享了vue页面使用多个定时器的具体代码,供大家参考,具体内容如下 问题描述 vue页面使用多个定时器 html: <div class="prod-item"&...
    99+
    2024-04-02
  • gxworks2中定时器的使用方法是什么
    在GX Works2中,使用定时器的方法如下: 打开GX Works2软件,创建一个新的工程或打开一个已有的工程。 在工程中...
    99+
    2023-10-26
    gxworks2
  • C# Quartzs定时器的使用方法是什么
    这篇文章主要介绍“C# Quartzs定时器的使用方法是什么”,在日常操作中,相信很多人在C# Quartzs定时器的使用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#&nb...
    99+
    2023-06-21
  • springboot使用定时器@Scheduled不管用的解决方法
    springboot使用定时器@Scheduled不管用的解决方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。使用定时器@Scheduled不管用如果是一开始就不能用就是...
    99+
    2023-06-22
  • java定时器timer的使用方法代码示例
     1.首先肯定是容器一启动就要启动定时器,所以我们可以选择把定时器写在一个监听器里,容器一启动所以监听器也就跟着启动,然后定时器就可以工作了。第一步,把自己写的监听器加到web.xml中;第二步,写一个监听器,实现ServletC...
    99+
    2023-05-30
    java timer 定时器
  • Linux中Timer定时器怎么使用
    在Linux中,可以使用timer_create函数创建一个定时器,然后使用timer_settime函数设置定时器的间隔和触发方式...
    99+
    2023-10-26
    Linux
  • Linux重定向方法怎么使用
    这篇文章主要讲解了“Linux重定向方法怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux重定向方法怎么使用”吧!Linux 中的数据流谈到 Linux 的重定向,就不得不提以...
    99+
    2023-06-27
  • 如何在linux中使用crontab定时器
    如何在linux中使用crontab定时器?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。编辑:crontab –u root –e列表:crontab –u root –l...
    99+
    2023-06-09
  • linux多线程定时器如何使用
    在Linux上使用多线程定时器,可以使用以下步骤:1. 包含必要的头文件:```c#include #include #includ...
    99+
    2023-10-09
    linux
  • C#中多种高效定时器方法的使用详解
    目录使用 System.Threading.Timer 和 ManualResetEventSlim使用 Stopwatch 和 Sleep 方法使用 Task.Delay 和 as...
    99+
    2023-05-14
    C# 定时器
  • MySQL定时任务EVENT事件的使用方法
    目录一、查看定时策略是否开启二、创建定时任务 三、定时任务操作四、定时规则一、查看定时策略是否开启 show variables like '%event_scheduler%';  * on这里是...
    99+
    2023-05-25
    MySQL定时任务EVENT事件 MySQL EVENT事件
  • React-Hook中使用useEffect清除定时器的实现方法
    目录useEffectuseEffect清除定时器最后useEffect 之前我们学习了class组件的声明周期,那么我们想在函数式组件中做一些声明周期有关操作能否实现呢?函数式组件...
    99+
    2022-11-13
    react Hook useEffect清除定时器 react Hook定时器 react Hook useEffect使用
  • javascript定时器清除的方法
    这篇文章主要介绍了javascript定时器清除的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JavaScript的特点1.JavaScript主要用来向HTML页面添...
    99+
    2023-06-14
  • linux输入输出重定向使用的方法
    这篇文章主要介绍“linux输入输出重定向使用的方法”,在日常操作中,相信很多人在linux输入输出重定向使用的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux输...
    99+
    2024-04-02
  • linux定时关机设置的方法是什么
    在Linux中,可以使用cron工具来设置定时关机。以下是设置定时关机的方法:1. 使用root权限登录系统。2. 打开终端。3. ...
    99+
    2023-09-16
    linux
  • 使用restyQuartz执行定时任务的配置方法
    目录1.在jobs.properties里配置启动执行的任务2.通过new的方式来创建临时任务3.编写一个job执行类1. 在jobs.properties里配置启动执行的任务 基本...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作