我的定时任务中的 iostream等会core down,很苦恼。
今天发现我的定时任务里cout竟然挂掉了,然后socket的write和read会被阻塞了,好奇怪的事情,redis也阻塞着。
然后师傅看了我的程序,认为我的定时任务是使用sigalarm定时,然后在信号中断里做业务,而我的业务太多了,一般他们不在中断中做太多业务,怀疑我的cout、fout或者redisCommand的上下文被破坏掉了,建议我不要这么做。
现在我总结几个做定时任务的方法吧:
一、多线程,另起一个线程,假如30s做定时时间,那么sleep 30s,然后做相应动作
二、main函数里打时间戳,每次进入到要做业务的代码块时判断时间是否大于30s,如果大于,就做相应业务,然后更新时间
三、signal,就是我现在做的方法,只不过在中断程序里设置标志,把要定时执行的任务放在main函数里,每次进入时判断标志决定是否执行。