Mer 08/08/2012 - Actualités

Xavier
Administrateur du site
Messages : 817
Enregistré le : mer. 22 juin 2011 18:25

Mer 08/08/2012 - Actualités

Message non lu 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 ?.
Denis
Messages : 180
Enregistré le : jeu. 23 juin 2011 09:21

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

Message non lu par Denis »

donc quadricore indispensable :-)
Xavier
Administrateur du site
Messages : 817
Enregistré le : mer. 22 juin 2011 18:25

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

Message non lu 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).
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Xavier
Administrateur du site
Messages : 817
Enregistré le : mer. 22 juin 2011 18:25

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

Message non lu 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:
Denis
Messages : 180
Enregistré le : jeu. 23 juin 2011 09:21

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

Message non lu 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 ;-)
Xavier
Administrateur du site
Messages : 817
Enregistré le : mer. 22 juin 2011 18:25

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

Message non lu 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.
Répondre