当前位置: 技术问答>linux和unix
请问一个关于定时的问题
来源: 互联网 发布时间:2016-04-01
本文导语: 我现在要做一个有关定时的程序,具体如下: 名称 定时 1 客厅 主灯 开 06:30 关07:00 2 客厅 附灯 开 06:30 关08:00 3 卧室 主灯调光 开 08:00 关10:...
我现在要做一个有关定时的程序,具体如下:
名称 定时
1 客厅 主灯 开 06:30 关07:00
2 客厅 附灯 开 06:30 关08:00
3 卧室 主灯调光 开 08:00 关10:00
……
就是设定一下哪个位置的灯,什么时候开和关,然后到时间了,就执行哪个函数(智能控制)
就是一年里可能每天都要定时这个灯,每天不一定一样
我做这个程序的思路是:
我不停的获取系统时间和已设置的时间进行比较,如果前后差大概1分钟就执行某个函数(开或者关)
是不是不能用linux下的那个定时器的函数?只是用时钟管理的那个函数?这样不停的查询时钟,会不会占用用资源?
还有一个问题:并不是一定每天都定时,,那么首先我要判断这个灯有没有定时,这个怎么做啊?
名称 定时
1 客厅 主灯 开 06:30 关07:00
2 客厅 附灯 开 06:30 关08:00
3 卧室 主灯调光 开 08:00 关10:00
……
就是设定一下哪个位置的灯,什么时候开和关,然后到时间了,就执行哪个函数(智能控制)
就是一年里可能每天都要定时这个灯,每天不一定一样
我做这个程序的思路是:
我不停的获取系统时间和已设置的时间进行比较,如果前后差大概1分钟就执行某个函数(开或者关)
是不是不能用linux下的那个定时器的函数?只是用时钟管理的那个函数?这样不停的查询时钟,会不会占用用资源?
还有一个问题:并不是一定每天都定时,,那么首先我要判断这个灯有没有定时,这个怎么做啊?
|
如果是Linux可以使用crontab
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
时程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
如果实在要编程,可以找找crontab的代码参考一下。
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
时程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
如果实在要编程,可以找找crontab的代码参考一下。
|
不如由cron帮你执行。
如果要自己做,可以这样:
1、设置时间时,根据与现在的时间差,设置定时器;
2、定时器到,执行相应操作,在设置下一个定时器
如果要自己做,可以这样:
1、设置时间时,根据与现在的时间差,设置定时器;
2、定时器到,执行相应操作,在设置下一个定时器
|
定时器的实现:
1, 可以使用现成的:cron , at
2, 用sleep实现。
3, alarm
4, select
5, pthread_cond_timedwait
怎么选:
sleep一般都不能满足复杂点的需求
alarm用在多进程里, 并且要处理信号
slect定时精度要高点。
pthread_cond_timedwait定时精度高, 可以配合线程池使用。
1, 可以使用现成的:cron , at
2, 用sleep实现。
3, alarm
4, select
5, pthread_cond_timedwait
怎么选:
sleep一般都不能满足复杂点的需求
alarm用在多进程里, 并且要处理信号
slect定时精度要高点。
pthread_cond_timedwait定时精度高, 可以配合线程池使用。