Linux定时器的使用(3)

来源:未知 责任编辑:责任编辑 发表时间:2015-10-08 14:16 点击:

40   }

41    

42   /* init */

43   void init_time(void)

44   {

45       struct itimerval val;

46    

47       val.it_value.tv_sec = 1;

48       val.it_value.tv_usec = 0;

49       val.it_interval = val.it_value;

50       setitimer(ITIMER_PROF, &val, NULL);

51   }

52    

53    

54   int main(void)

55   {

56       init_sigaction();

57       init_time();

58       printf("You have only 10 seconds for thinking.\n");

59    

60       while(1);

61      return 0;

62   }

63    

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

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

sleep

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

#include <signal.h>

#include <unistd.h>

#include <string.h>

#include <stdio.h>

 

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); /*睡眠2秒*/

/*向主进程发送信号,实际上是自己给自己发信号*/

sigqueue(getpid(), 50, tsval);

}

return 0;

}

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

时间差

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

 

#include <signal.h>

#include <unistd.h>

#include <string.h>

#include <stdio.h>

#include <time.h>

 

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;

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • /etc/fstab 详解
  •  LVS-NAT和LVS-DR模式的实现详解
  •  RHCE考试之磁盘配额
  • nginx主主集群
  •  LVM逻辑卷管理器
  • 学习笔记:ACL详解
  • suse linux双网卡双网关配置
  • puppet文件服务配置
  •  Nginx主主负载均衡架构

快速直达

操作系统导航

LinuxWindows虚拟机
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1