我知道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认证有帮助!