@ marr75
@ Zac
оба это хороший совет, но почему бы и нет:
int x = 0; //last exec timestamp(ts)
int s = 0; //15 s ts
int m = 0; //min ts
int d = 0; //day ts
while(check for event()){ //e.g. stop service etc.
if((x - s)>15){
//code for ever 15 s here
s = currentTime();
}
if ((x - m)>60){
//code for every min here
m = currentTime();
}
if ((x - d)> 86400)(
//code for every day here
d = currentTime();
}
sleep(5000); // or wait() w/e sleeps the thread for 15s
x = currentTime();
}
однако это предполагает, что вы делаете относительно легкую задачу
если вы выполняете более тяжелую задачу, такую как SQL-запрос и вставка, или что-то в этом роде, просто убедитесь, что поток покончил с собой, когда закончил.
Возможно, вы получаете возможное переполнение, потому что ваши рабочие потоки в 15 с и мин выполняются дольше, чем 15 с и минут соответственно. Если это так, вы будете добавлять потоки быстрее, чем они будут в конечном итоге приводить к переполнению, так как msergeant пытался скажем, добавляйте новый поток только в том случае, если ваш старый рабочий поток завершен.