Aide - Recherche - Membres - Calendrier
Version complète : Chrono...
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS > Développement HB++
D2P
Comment mesurer le temps écoulé depuis une action ?

J'ai bien trouvé la class timer, mais pas l'inverse icon_cry.gif icon_bla.gif
Palmidem
CITATION(D2P @ 12/05/2007 à 09:34 ) *
Comment mesurer le temps écoulé depuis une action ?
J'ai bien trouvé la class timer, mais pas l'inverse icon_cry.gif icon_bla.gif

Je suis sans doute très bête, mais ... en notant l'heure de début de cette action et en la déduisant de l'heure "actuelle", ça ne le fait pas ?
A moins que tu ne souhaites poser une alarme (temps de cuisson des oeufs durs ? )
D2P
CITATION(Palmidem @ 12/05/2007 à 10:14 ) *
Je suis sans doute très bête, mais ... en notant l'heure de début de cette action et en la déduisant de l'heure "actuelle", ça ne le fait pas ?
A moins que tu ne souhaites poser une alarme (temps de cuisson des oeufs durs ? )

Non je ne veux pas poser une alarme. Et la solution de l'heure ne convient pas car les mesures sont plûtot de l'ordre du 100ème de seconde anim_wink.gif
quagliozzi
CITATION(D2P @ 12/05/2007 à 10:15 ) *
Non je ne veux pas poser une alarme. Et la solution de l'heure ne convient pas car les mesures sont plûtot de l'ordre du 100ème de seconde anim_wink.gif


Salut André,

CITATION
Je suis sans doute très bête, mais ... en notant l'heure de début de cette action et en la déduisant de l'heure "actuelle", ça ne le fait pas ?
A moins que tu ne souhaites poser une alarme (temps de cuisson des oeufs durs ? )


C'est à mon avis la seule solution disponible sur Palm OS (mais pas seulement).

Tu peux tout simplement utiliser Ticks et TicksPerSecond.

Une déclaration du type:

CODE
Private TicksNow As long
Private ElpasedTime As long
...

TicksNow = Ticks
....

ElpasedTime = Ticks-TicksNow


Le temps écoulé est en "Ticks par seconde", qui dépend d'une machine à une autre:

______________________________________________________________
Doc HB++:

This property returns the number of ticks per second. On the majority of handhelds devices, the frequency is roughly between 50 and 100 ticks per second. Sometimes on certain versions of Palm OS® emulator, this property can return a false value because it does not take into account the performance of the computer on which the emulator is running.

______________________________________________________________


Pour une précision bien supérieure, tu n'as pas d'autres choix que d'utiliser un PNO.

Rem: Laisse surtout tomber la solution des Timers, totalement imprécis. Leur précision de base n'est pas élevée et la notification événementielle fait que tu n'es pas certain du moment de la réception de l'événement MyTimer_Timer().

Empilés dans la liste des messages, dû à leur priorité, ces événements ont leur utilité pour des tâches dont la précision n'est pas un critère essentiel.

A+
Eric.
D2P
Salut Eric.

Pour ce que je veux faire maintenant, les ticks iront très bien car je veux comparer deux temps d'exécution dans l'absolu, peut importe l'échelle anim_wink.gif
D2P
Je viens donc d'essayer de comparer le temps de chargement de ma form principale. Au début, je ne comprennais plus rien puisque ma nouvelle version met 5 fois plus de temps. Mais je viens de remarquer une chose que je ne m'explique pas.

Dans les deux versions, je stocke la valeur ticks dans une variable en première instruction du form_load(), et en fin de form_load(), je calcule la différence entre la valeur actuelle et celle stockée, que j'affiche par un message box.

Et bien mes 2 versions de PlacMag ne se comportent pas de la même façon :
- 1ère version : il m'affiche très vite la msgbox avec une valeur petite, mais quand je fais un tap sur "terminé", la form met encore quelques 1/10 s pour s'afficher,
- 2ème version : la msgbox met plus de temps pour apparaître avec une valeur plus grande, mais ensuite l'affichage après le tap sur "terminé" est immédiat.

Une explication à ça ?
Payalba
Si ca ne tenait qu'à moi, je ne mettrai pas ce message box
Je mettrai par exemple le temps dans le caption de la fenêtre ou dans un label
quagliozzi
CITATION(D2P @ 12/05/2007 à 22:25 ) *
Je viens donc d'essayer de comparer le temps de chargement de ma form principale. Au début, je ne comprennais plus rien puisque ma nouvelle version met 5 fois plus de temps. Mais je viens de remarquer une chose que je ne m'explique pas.

Dans les deux versions, je stocke la valeur ticks dans une variable en première instruction du form_load(), et en fin de form_load(), je calcule la différence entre la valeur actuelle et celle stockée, que j'affiche par un message box.

Et bien mes 2 versions de PlacMag ne se comportent pas de la même façon :
- 1ère version : il m'affiche très vite la msgbox avec une valeur petite, mais quand je fais un tap sur "terminé", la form met encore quelques 1/10 s pour s'afficher,
- 2ème version : la msgbox met plus de temps pour apparaître avec une valeur plus grande, mais ensuite l'affichage après le tap sur "terminé" est immédiat.

Une explication à ça ?


Salut André,

1/ Si je comprends bien, il y a deux versions? peut-être est-ce la raison qui fait que l'une est plus rapide que l'autre.

2/ Afficher un MsgBox dans un événement FormLoad n'est pas trop conseillé. D'une façon générale, afficher une form dans une form au chargement. Ceci est lié au fait que LOAD est utilisé en interne et externe pour charger les ressources nécessaires à l'affichage des fenêtres (pour une form). Il en va de même pour un MsgBox, il peut donc survenir parfois qq problèmes voire plantage.

Ce que je ferais:
- en mode debug, c'est plutôt un DebugPrint ...
- en mode réel (sur machine), un label temporaire dans la form principal, et en fin de LOAD, j'y changerais sa propriété Caption (valeur de la différence des Ticks).

3/ Pour mémoriser les Ticks j'utiliserais une variable temporaire globale, visible par tout tes autres codes, tu peux ainsi la réutiliser à volonté pour Debug dans d'autres parties de ton code.

4/ En ce qui concerne la lenteur, s'il s'agit de deux codes différents (deux versions?), la raison en est l'utilisation/l'accèes à des ressources nécessitant un long temps d'accès.
Par exemple, l'accès itératif à un grand nombre de ressources binaires pour les charger dans des collections, tout ce qui nécessite le peuplement d'objets du type Collection, Grid, etc..., l'accès à des PDB, la création de PDB, etc...

5/ Ce phénomène de lenteur excessive est-elle au premier démarrage (ce qui est normal pour tout soft lancé la première fois - création prefs, code 68k,...) ou systématique?


N'oublie pas: évite toute interférence entre ton LOAD et d'autres fenêtres.

Voilà, si tu as plus de précisions...

A+
Eric.
D2P
CITATION(Payalba @ 13/05/2007 à 10:24 ) *
Si ca ne tenait qu'à moi, je ne mettrai pas ce message box
Je mettrai par exemple le temps dans le caption de la fenêtre ou dans un label



CITATION(quagliozzi @ 13/05/2007 à 10:33 ) *
Salut André,

1/ Si je comprends bien, il y a deux versions? peut-être est-ce la raison qui fait que l'une est plus rapide que l'autre.

2/ Afficher un MsgBox dans un événement FormLoad n'est pas trop conseillé. D'une façon générale, afficher une form dans une form au chargement. Ceci est lié au fait que LOAD est utilisé en interne et externe pour charger les ressources nécessaires à l'affichage des fenêtres (pour une form). Il en va de même pour un MsgBox, il peut donc survenir parfois qq problèmes voire plantage.

Ce que je ferais:
- en mode debug, c'est plutôt un DebugPrint ...
- en mode réel (sur machine), un label temporaire dans la form principal, et en fin de LOAD, j'y changerais sa propriété Caption (valeur de la différence des Ticks).

3/ Pour mémoriser les Ticks j'utiliserais une variable temporaire globale, visible par tout tes autres codes, tu peux ainsi la réutiliser à volonté pour Debug dans d'autres parties de ton code.

4/ En ce qui concerne la lenteur, s'il s'agit de deux codes différents (deux versions?), la raison en est l'utilisation/l'accèes à des ressources nécessitant un long temps d'accès.
Par exemple, l'accès itératif à un grand nombre de ressources binaires pour les charger dans des collections, tout ce qui nécessite le peuplement d'objets du type Collection, Grid, etc..., l'accès à des PDB, la création de PDB, etc...

5/ Ce phénomène de lenteur excessive est-elle au premier démarrage (ce qui est normal pour tout soft lancé la première fois - création prefs, code 68k,...) ou systématique?
N'oublie pas: évite toute interférence entre ton LOAD et d'autres fenêtres.

Voilà, si tu as plus de précisions...

A+
Eric.

Un truc me rassure, les pros ont le même avis cool.gif

Je corrige ça mais ce que je ne comprends pas c'est le fait que le comportement n'est pas identique et qu'une version affiche la msgbox et continue à travailler avant d'afficher la form, alors que l'autre n'affiche la msgbox que quand la travail est réellement terminé.

Mais finalement peu importe, je corrige ça en enlevant cette msgbox et je regarde ensuite anim_wink.gif
Payalba
Pour comprendre, il faudrait que tu suive le cheminement de tous les évènements:
Les repaint des tables, etc...
Et le repaint font peut être appele a des lectures de bases etc...
D2P
CITATION(Payalba @ 13/05/2007 à 18:07 ) *
Pour comprendre, il faudrait que tu suive le cheminement de tous les évènements:
Les repaint des tables, etc...
Et le repaint font peut être appele a des lectures de bases etc...

Si j'obtiens les mêmes résultats sans la msgbox, alors je passerai pas là anim_wink.gif
D2P
Ca va mieux. En fait, en remplaçant la msgbox par un affichage de la valeur dans la caption de la form, j'avais le même résultat. Mais payalba m'a mis la puce à l'oreille avec les paint des tables. En fait il ne fallait pas que je récupère la 2ème valeur à la fin du formlaod(), mais à la fin du form_paint().

Et là, j'ai en réalité gagné 30 % du lancement de l'appli jusqu'à la fin de l'affichage de la 1ère form yeah.gif Il me semblait bien que j'avais de la marge icon_bla.gif
Payalba
Pour les objets, qui le gere, tu fait bien les redraw = false pour inhiber les repaint intempestifs et redraw = true lorsque tu es sur qu'il faut redessiner ?
D2P
CITATION(Payalba @ 13/05/2007 à 21:45 ) *
Pour les objets, qui le gere, tu fait bien les redraw = false pour inhiber les repaint intempestifs et redraw = true lorsque tu es sur qu'il faut redessiner ?

Oui, surtout sur les Grid. Mais sans rentrer dans les détails, maintenant que je connais un peu mieux HB++, j'ai remplacé 4 Grid par 1 GridEx icon_bla.gif
Payalba
Super smile.gif

Quand tu dis que tu gère le redraw pour les grid, tu sous entends grid et gridex ?
D2P
CITATION(Payalba @ 13/05/2007 à 22:35 ) *
Super smile.gif

Quand tu dis que tu gère le redraw pour les grid, tu sous entends grid et gridex ?

Oui anim_wink.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.