日期:2014-05-16  浏览次数:20695 次

Linux CPP程序的三种实现定时任务的方法

我的定时任务中的 iostream等会core down,很苦恼。

今天发现我的定时任务里cout竟然挂掉了,然后socket的write和read会被阻塞了,好奇怪的事情,redis也阻塞着。

然后师傅看了我的程序,认为我的定时任务是使用sigalarm定时,然后在信号中断里做业务,而我的业务太多了,一般他们不在中断中做太多业务,怀疑我的cout、fout或者redisCommand的上下文被破坏掉了,建议我不要这么做。


现在我总结几个做定时任务的方法吧:

一、多线程,另起一个线程,假如30s做定时时间,那么sleep 30s,然后做相应动作

二、main函数里打时间戳,每次进入到要做业务的代码块时判断时间是否大于30s,如果大于,就做相应业务,然后更新时间

三、signal,就是我现在做的方法,只不过在中断程序里设置标志,把要定时执行的任务放在main函数里,每次进入时判断标志决定是否执行。

2楼u014022235昨天 18:31
我错了,手一抖就、、、、、准备顶的,怎么恢复啊,我错了我错了
1楼bg2bkk昨天 18:07
今天解决了个困扰半个月的问题,原因竟然是数组开小了,导致越界访问,然后core down。n遥想这半月,怀疑标准std,怀疑ofstream,怀疑stl的map,结果却是这么个二逼的问题,印象深刻教训惨痛。n1、出问题不要怕,问题总是有根源的,不会凭空来的,要积极面对n2、问题总是首先出在自己身上的,先审视自己n3、越莫名其妙越显得高大上越找不到思路的问题,99%都是非常二逼的简单错误导致。nn当然,我set/get,push/pop redis时,用的key不能以数字开头这个问题基本可以确定不是我的问题了。