免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2959 | 回复: 8
打印 上一主题 下一主题

[函数] 如何用C实现24小时运行固定的一个函数一次? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-05-15 12:26 |只看该作者 |倒序浏览
我想用“父进程”实现24小时运行固定的一个函数(如:my_work())一次,“子进程”接受处理进来的连接。或者说我想每天凌晟12点运行my_work()一次。

我的思路是在“父进程”中调用time()函数,利用其返回值取24小时的秒数(86400秒)的模做判断,如果等于零就调用一个自定义的函数做其他事情。

如:

time_t num;

num = time((time_t *) 0);
if((long)num % 86400 == 0)
{
    my_work();
}

要是我把上面的代码放到父进程里,这些代码会不断的轮询吗?要是不能,我就实现不了24小时运行my_work()一次的要求了。或者这段代码是不是只有生成新的子进程才执行一次??


各位大哥有什么好的实现方法吗?

论坛徽章:
0
2 [报告]
发表于 2003-05-15 12:40 |只看该作者

如何用C实现24小时运行固定的一个函数一次?

每天12点时fork一个子进程运行该函数后,sleep 24小时

论坛徽章:
0
3 [报告]
发表于 2003-05-15 12:43 |只看该作者

如何用C实现24小时运行固定的一个函数一次?

每天12点时fork一个子进程运行该函数后,sleep 24小时
如果你要每天凌晨12点运行只需要不间断在父进程中判断时间即可。
如果是自本次运行后的24小时,需要判断时间差。

论坛徽章:
0
4 [报告]
发表于 2003-05-15 12:45 |只看该作者

如何用C实现24小时运行固定的一个函数一次?

这样做有问题:
1 你的判断条件太硬了。万一系统负载变大或者出现无法抢占的情况,就可能错过那一秒。
2 你的判断过于频繁了,会占用大量CPU。
建议使用sleep实现。sleep (86400+delta)秒,然后对一下表,调整一下delta,再次sleep。

事实上,像24小时这么长的调用周期,使用cron就足够了,不必靠C来实现。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-05-15 12:46 |只看该作者

如何用C实现24小时运行固定的一个函数一次?

while(1)

/*父进程 在这里开始执行 */
if( (  ret = fork() ) ==0 )  {do_work}/*子进程在这里执行任务*/
else if( ret <0 ) {/*fork失败,perror();}
else
/*父进程 在这里sleep()或者alarm() */

论坛徽章:
0
6 [报告]
发表于 2003-05-15 12:47 |只看该作者

如何用C实现24小时运行固定的一个函数一次?

可以用unix系统提供的定时程序:crontab调用,这样就可以不用自己写了。
你的想法是可以的,就是判断条件能不能成立,需要多测几次。

论坛徽章:
0
7 [报告]
发表于 2003-05-15 13:00 |只看该作者

如何用C实现24小时运行固定的一个函数一次?

使用cron最简单

因为你的程序只是24小时才运行一次
没有必要为了这而在系统中不停的运行一个进程检查时间

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2003-05-15 13:12 |只看该作者

如何用C实现24小时运行固定的一个函数一次?

两个进程之间如果没有相互数据交换的话,直接把do_work作为一个可执行程序,使用系统cron去实现,这样会简单一些,也不用考虑那么多的因素。

论坛徽章:
0
9 [报告]
发表于 2003-05-15 13:18 |只看该作者

如何用C实现24小时运行固定的一个函数一次?

看了各位大哥的意见,我也觉得cron实现比较简单。

谢谢各位大哥的帮忙!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP