首页 > 编程知识 正文

linux定时器实现原理,linux多线程定时器的使用

时间:2023-05-05 12:14:20 阅读:111073 作者:119

我知道Linux有一个叫计时器的功能。 通过使用计时器,可以周期性地执行任务,也可以在指定时间执行任务。 Liunx初学者可能不太熟悉,本文教师将介绍几种Linux定时器的运用方法,希望您能掌握一些基本的知识。

使用Linux的计时器功能有以下三种方法。

利用linux内部的3个计时器

利用sleep,usleep函数使过程睡眠一定时间

利用gettimeofday、difftime等

利用linux内部的3个计时器

首先,我们来看看linux操作系统如何利用为每个进程提供的三个内部计时器。

ITIMER_REAL:示出一个规定的时间间隔,根据实际的时间减少该计数,并且当时间间隔为0时发出SIGALRM信号。

ITIMER_VIRTUAL:表示进程运行时减少计数,并在间隔为0时发出SIGVTALRM信号的时间间隔。

ITIMER_PROF:表示在进程运行或系统调度进程时,减少计数并发出SIGPROF信号所需的时间。 它通常与ITIMER_VIRTUAL配合使用,用于计算系统核心时间和用户时间。

具体使用的函数如下所示。

上面的函数使用it_interval指定任务运行之前的时间,并使用it_value保存当前时间与任务运行之前的时间。 例如,将it_interval指定为2秒(微秒0 ),最初将it_value的时间也设定为2秒)微秒0 ),经过1秒后it_value减少1,经过1秒后it_value减少1

为了更好地理解这个问题,笔者再举一个例子。

以上程序的ITMER_REAL计时器每2秒发送一次SIGALRM信号,主函数接收到该信号后,调用信号处理函数prompt_info,向标准错误输出time is running out的字符串。 ITIMER_VIRTUAL和ITIMER_PROF的用法其实很相似。 setitimer中设定的计时器为ITIMER_VIRTUAL时,只需将sigaction中的SIGALRM变为SIGVTALarm,即可同样变为timer_virtual

利用sleep,usleep函数使过程睡眠一定时间

接下来,我们来看看如何使用sleep和usleep实现定时执行任务。 具体函数如下所示。

从观察中可以看出,此函数比上面的函数更简单,时间更准确,指定2秒钟后输出字符串。 所以,如果我们只做普通的定时而时间到了,在执行一项任务时,使用这个方法是最简单方便的。

利用gettimeofday、difftime等

最后,我们来看看如何用自己计算时间差的方法进行定时。 具体函数如下

通过观察可以发现,该方法与上述方法的区别在于,这是用自己的手计算时间差。 如果希望更准确地计算时间差,可以将time函数替换为gettimeofday。 虽然这个在微妙之前是正确的,但是这个方法效率很低,所以不怎么使用。

以上是利用Linux计时器的三种方法。 具体使用哪个可以根据实际情况决定。

这次简单的Linux计时器使用方法的讲义到此告一段落。 今后如有任何相关内容继续补充或修改,笔者将在此继续进行相关内容的补充或修改工作。 另外,我们期待您对这次讲课的建议和补充。 最后希望这次的讲座对大家学习Linux和Linux认证有帮助!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。