Page 1 sur 1

Mer 08/08/2012 - Actualités

Posté : mer. 8 août 2012 10:51
par Xavier
Check_EventDate


Le service qui évalue les dates des évènements récurrents fonctionne parfaitement.

Pour le moment il est utilisé lors d'un clic sur une cellule du calendrier ou lors d'un changement de dossier, ces deux actions déclenchant une mise à jour de la liste des evènements. Le service étant implémenté au niveau de l'unité et non de la fenêtre, il sera réutilisable pour gérer les Alarmes même sans avoir le Calendrier ouvert.

Sa mise au point a été un exercice intéressant. XT4 autorisant les périodicités complexes (par exemple : 1 jour sur 10), il n'était pas possible de simplement vérifier si la date passée en paramètre était conforme à la règle de récurrence de l'évènement.

La méthode utilisée consiste donc à "jouer" la règle pour de vrai :
  • Définition de la date de la première occurrence. Elle vaut la date de début de l'évènement pour les modes quotidien et hebdomadaire, et est calculée pour les modes mensuel et annuel comme étant la première occurrence possible après la date de début.
  • Incrément de cette date selon la régle définie et comparaison avec la date passée en paramètre. En mode hebdomadaire, l'incrément se fait par 1 jour ou par N semaines. Ce mode qui est le plus complexe a un second contrôle portant sur le jour de semaine.
  • Sortie de la boucle si la date de test correspond à la date à vérifier, ou si la date de fin est dépassée (s'il n'a pas de date de fin, c'est celle de l'application qui est utilisée : le 31/12/2299).
Cette méthode basée sur la vérification des occurences depuis la date de début peut sembler fastidieuse, mais elle permet de vérifier des règles complexes, comme par exemple : Le 08/08/2012 correspond-il à un évènement programmé chaque lundi, mardi et mercredi, une semaine sur 5, à partir du 01/02/2012 ?.

Re: Mer 08/08/2012 - Actualités

Posté : mer. 8 août 2012 15:34
par Denis
donc quadricore indispensable :-)

Re: Mer 08/08/2012 - Actualités

Posté : mer. 8 août 2012 16:30
par Xavier
DMo a écrit :donc quadricore indispensable :-)
Héhé non car c'est du mono-thread.

Je viens de tester avec deux évènements débutant à DateMin (31/12/1759), un quotidien et un hebdomadaire du lundi au vendredi. Même en cliquant en 2050, chaque cellule du calendrier affiche les évènements correctement, il n'y a aucune latence ! :shock:

Comme ça me paraissait étrangement trop rapide, j'ai mis un log et en effet ça fait ce que ça doit faire :
Check_EventDate.png
(On voit que pour l'hebdomadaire, il a bouclé jusqu'à DateMax car le 25/07/2054 est un samedi.)

En quotidien ça fait plus de 92K étapes mais je suppose que comme c'est du code extrèmement simple, le CPU fait ça en un rien de temps, après tout ils sont supposés faire 2 à 3 milliards de cycles par secondes. Au pire (ordinateur super lent), il sera possible de modifier le système pour que la date de début des évènements soit constamment réajustée (avancée à la date de la dernière occurrence).

Re: Mer 08/08/2012 - Actualités

Posté : mer. 8 août 2012 16:36
par Xavier
XMo a écrit :(On voit que pour l'hebdomadaire, il a bouclé jusqu'à DateMax car le 25/07/2054 est un samedi.)
A la réflexion, cette partie est optimisable... Merci. :mrgreen:

Re: Mer 08/08/2012 - Actualités

Posté : mer. 8 août 2012 23:18
par Denis
je disais ca en blaguant, pas que tu le prennes au premier degré ;-) mais bon, si t'arrive à faire une ou deux optimisations (genre tester > et pas = ???), c'est toujours bon à prendre ;-)

Re: Mer 08/08/2012 - Actualités

Posté : jeu. 9 août 2012 11:52
par Xavier
DMo a écrit :je disais ca en blaguant, pas que tu le prennes au premier degré ;-) mais bon, si t'arrive à faire une ou deux optimisations (genre tester > et pas = ???), c'est toujours bon à prendre ;-)
Hmmm c'est risqué, si je me lance là dedans je ne pourrais pas m'arrêter, tout étant optimisable... : :mrgreen:
Le cas des tests ">" plus rapides que les "=", je crois que c'est spécifique GT, en tout cas j'ai rien trouvé là dessus en Delphi.