J'ai une fréquence et une plage de temps avec lesquelles la fréquence doit être exécutée. Par exemple, si l'heure actuelle est deux heures et la fréquence est de 360 minutes, il faut supposer que puisqu'il vient de passer minuit, la tâche doit exécuter à 360 minutes après 12 moyens 6 heuresDéfinir le début de la tâche en fonction de la fréquence et du démarrage du serveur
l'heure actuelle est démarrage du serveur heure à partir de minuit. donc si le serveur commence à 5h du matin et frequncy est 360 la tâche doit être exécutée à 6h du matin
mais si la tâche est 5 heures et la fréquence est de 240, car il a déjà passé 240 minutes de minuit la prochaine course devrait être à 8 heures
Si le serveur démarre à 10 heures et la fréquence est de 300, puis à partir de minuit, une course est écoulé à 5h du matin ans suivant calculé à 10 heures alors commencera immédiatement à 10 heures
les plages de temps sont divded en 4 trimestres, 12H de 6h à 12h, de 12h à 18h et de 18h à 12h le jour suivant Ceci est le code ci-dessous qui fonctionne bien pour 240 et 360 fre mais ne va pas quand sa fréquence est de 60. Certaines valeurs qui sont fournies ci-dessous:
stNow----serverTime
sElapsed ---time elapsed from midnight
currFreq ----frequecy
protected int _getInitWorkerTime()
{
int vRun=0;
STime stNow= new STime(PWMSystem.newDate());
int currFreq = _findAlertFrequency()/60;
int sElapsed =Constants.MINUTES_PER_DAY-stNow.elapsedMinutes(STime.midnight);
_log.error("now time as 24------"+stNow.getHourNo24());
_log.error("now currFreq------"+currFreq);
_log.error("now sElapsed-----"+sElapsed);
if(sElapsed == 1440)
sElapsed=0;
if(stNow.getHourNo24()>=0 && stNow.getHourNo24()<=6)
{
_log.error("now time as 24-inside cond-1-----"+stNow.getHourNo24());
if(currFreq>sElapsed)
vRun= currFreq-sElapsed;
else
vRun= -(currFreq-sElapsed);
}
if(stNow.getHourNo24()>6 && stNow.getHourNo24()<=12)
{
_log.error("now time as 24-inside cond-2-----"+stNow.getHourNo24());
if(currFreq>sElapsed)
vRun=360-(currFreq-sElapsed);
else
vRun=360-(-(currFreq-sElapsed));
}
if(stNow.getHourNo24()>12 && stNow.getHourNo24()<=18)
{
_log.error("now time as 24-inside cond-3-----"+stNow.getHourNo24());
if(currFreq>sElapsed)
vRun=720-(currFreq-sElapsed);
else
vRun=720-(-(currFreq-sElapsed));
}
if(stNow.getHourNo24()>18 && (stNow.getHourNo24()<=24 ||stNow.getHourNo24()<=0))
{
_log.error("now time as 24-inside cond-4-----"+stNow.getHourNo24());
if(currFreq>sElapsed)
vRun=1080-(currFreq-sElapsed);
else
vRun=1080-(-(currFreq-sElapsed));
}
// vRun=_MAX_FREQUENCY_DELAY_IN_SEC+ sElapsed*60+_findAlertFrequency()+_BOOT_DELAY_SECONDS_START;*/
//vRun=stNow.elapsedMinutes(STime.midnight)*60+_findAlertFrequency()+_BOOT_DELAY_SECONDS_START;
return (vRun*60 + _BOOT_DELAY_SECONDS_START);
}
Peut-être augmenter la prime à 500 aidera :) – Zabba
Ai-je raison de dire que la fonction que vous avez affichée est utilisée pour initialiser certaines tâches qui doivent être exécutées à un moment donné? La fonction est-elle exécutée une seule fois pour chaque tâche au démarrage? Donc, si vous appelez la fonction, la valeur de retour est l'heure du jour où la tâche doit commencer? – n3utrino
@gabe: - vous avez raison. Ceci est pour le début des tâches. Cette fonction s'exécute seulement une fois à init. – GustyWind