Aller au contenu

[Résolu] Temps d'exécution d'une routine


Messages recommandés

Posté(e)

Bonjour à tous.

 

Je cherche à savoir le temps d'exécution d'une routine (et je ne dois pas être le seul...).

J'ai trouvé la variable qui chronomètre le temps passé sur un dwg (pourquoi utiliser celle-là plustôt qu'une autre ???).

J'ai donc placé un (setq ComptTmpDeb (getvar "TDINDWG")) en début de code et un (setq ComptTmpFin (getvar "TDINDWG")) à la fin.

Mais comment exprimer le résultat de ComptTmpFin - ComptTmpDeb en heure, minute et seconde dans un (alert par exemple ?

 

si quelqu'un as une astuce, un conseil... je suis preneur...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Hello DENISHEN

 

 

j'ai ca en stock, je ne sais plus de qui c'est a la base

 

c'est pas avec la meme variable mais avec une modif ca doit le faire.

 

en debut de LISP (decomptedebut)

en fin de LISP (decomptefin)

 

tu me dira si ca marche

 

(defun decomptedebut ()
 (setq datede (rtos (getvar "cdate") 2 8)) ; année
 (setq annee (substr datede 1 4))	; mois
 (setq mois (substr datede 5 2))	; jour
 (setq jour (substr datede 7 2))	; heure
 (setq heure (substr datede 10 2))	; minute
 (setq minute (substr datede 12 2))	; seconde
 (setq seconde (substr datede 14 2))	; concatenation de la date
 (setq seconde10 (substr datede 16 2))	; concatenation de la date
				; vous pouvez modifier ici le suffixe "le" et les séparateurs "/"
				; exemple :
				; (setq n-date (strcat "agence toto le : "jour"-"mois"-"annee))
 (setq	n-datede (strcat "\nDEBUT le : " jour "/" mois "/" annee " à " heure ":" minute	":" seconde ":"	seconde10)
 )
 (prompt n-datede)
 (princ)
)

 


(defun decomptefin ()
 (setq datefin (rtos (getvar "cdate") 2 8)) ; année
 (setq annee (substr datefin 1 4))	; mois
 (setq mois (substr datefin 5 2))	; jour
 (setq jour (substr datefin 7 2))	; heure
 (setq heure (substr datefin 10 2))	; minute
 (setq minute (substr datefin 12 2))	; seconde
 (setq seconde (substr datefin 14 2))	; concatenation de la date
 (setq seconde10 (substr datefin 16 2)) ; concatenation de la date
				; vous pouvez modifier ici le suffixe "le" et les séparateurs "/"
				; exemple :
				; (setq n-date (strcat "agence toto le : "jour"-"mois"-"annee))
 (setq	n-datefin (strcat "\nFIN   le : " jour "/" mois	"/" annee " à "	heure ":" minute ":" seconde ":" seconde10)
 )
 (setq datetravail (rtos (- (atof datefin) (atof datede)) 2 8))
 (setq heuret (substr datetravail 2 2)) ; minute
 (setq minutet (substr datetravail 4 2)) ; seconde
 (setq secondet (substr datetravail 6 2)) ; concatenation de la date
 (setq seconde10t (substr datetravail 8 2)) ; concatenation de la date
				; vous pouvez modifier ici le suffixe "le" et les séparateurs "/"
				; exemple :
				; (setq n-date (strcat "agence toto le : "jour"-"mois"-"annee))
 (setq
   n-datetravail
    (strcat "\nSOIT                    " heuret ":" minutet ":" secondet ":" seconde10t " DE TRAVAIL")
 )
 (prompt n-datede)
 (prompt n-datefin)
 (prompt n-datetravail)
 (princ)
)

 

a+

 

Phil

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Posté(e)

Salut Phil, et merci pour ces codes... Bien que trop complets pour mes besoins... Bien qu'en le bidouillant un peu, il devrait faire l'affaire...

 

J'ai dégoté un bout de code sur la toile et j'ai tenté de l'adapter :

  (setq ComptTmpDeb (getvar "TDINDWG") ;en début de code
...
...
...
 (setq ComptTmpFin (getvar "TDINDWG") ; en fin de code
       ComptTmp    (- ComptTmpFin ComptTmpDeb)
 ) ;_ Fin de setq
 (setq ComptTmpSec (strcat (rtos (* 86400 ComptTmp) 2 2) "s.")
       ComptTmpMin (strcat (rtos (/ (* 86400 ComptTmp) 60) 2 2) "mn ")
       ComptTmpHeu (strcat (rtos (/ (* 86400 ComptTmp) 3600) 2 2) "h ")
 ) ;_ Fin de setq
 (princ (strcat ComptTmpHeu ComptTmpMin ComptTmpSec))

Seul problème, le résultat est : "0.00h 0.23mn 14.00s."

 

Je ne comprend pas les "0.23mn", mon code n'a pas duré plus de 10 secondes...

 

Quelqu'un aurait une idée ? Une astuce ?... Je suis preneur...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

(strcat "\nSOIT " heuret ":" minutet ":" secondet ":" seconde10t " DE TRAVAIL"))

Je n'arrive pas comprendre ces données, j'ai remplacé cette phrase par

(setq n-datetravail (strcat "\nTemps écoulé : "heuret "h " minutet "mn " secondet ":" seconde10t "s."))

qui me donne

Temps écoulé : .0h 00mn 01:30s.

Alors que mon code a duré environ 15 secondes... ?

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut

 

Le plus important n'est pas de savoir quel est le temps pour ma routine, mais quelle est la fonction la plus rapide.

Pour cela, tu as un outil reconnu dans la communauté du lisp --> Benchmark

 

Un exemple test pour juste incrémenter 1 à un chiffre

(benchmark (list '(1+ 1) '(+ 1 1)))

 

Resultat

Elapsed milliseconds / relative speed for 131072 iteration(s):

 

(1+ 1)......1531 / 1.06 <fastest>

(+ 1 1).....1625 / 1 <slowest>

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Re.

 

Je suis en train de pester avec ça :

(setq n-datetravail (strcat "\nTemps écoulé : " (menucmd "M=$(edtime,ComptTmp,HH MM SS)")))

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut Patrick_35, et merci pour cette réponse.

 

En fait, je ne cherche pas à comparer, mais bien à chronométrer...

 

Dans ma routine, il y a deux questions posées à l'utilisateur, temps qui ne rentre pas en compte dans le calcul, et ensuite, le "vrai" code commence, c'est ce temps là que j'aimerai connaitre.

 

Je n'arrive qu'à avoir un résultat en secondes... j'aurais aimé en heure, minute, seconde... avec :

(setq Result (strcat "Temps écoulé : " (rtos (- ComptTmpFin ComptTmpDeb) 2 2) " secondes."))

Dommage, ce sera pour plus-tard...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut,

 

en général quand on chronomètre des routines on a plutôt envie d'avoir une précision à la milliseconde. On utilisera donc plutôt la variable MILLISECS qui stocke le nombre de millisecondes écoulées depuis le démarrage du système.

 

  (setq t0 (getvar 'millisecs))
 ;;...
 ;;...
 (setq ti (- (getvar 'millisecs) t0))
 (prompt
   (strcat "\nTemps écoulé : "
                 (itoa (setq h (/ ti 3600000)))
                 "h "
                 (itoa (setq m (/ (setq r (- ti (* h 3600000))) 60000)))
                 "m "
                 (rtos (/ (- r (* m 60000)) 1000.) 2 3)
                 "s"
         )
 )

 

Mais en général, ceci suffit :

  (setq t0 (getvar 'millisecs))
 ;;...
 ;;...
 (setq t1 (getvar 'millisecs))
 (prompt (strcat "\nTemps écoulé : " (itoa (- t1 t0)) " millisecondes"))

ou :

  (setq t0 (getvar 'millisecs))
 ;;...
 ;;...
 (setq t1 (getvar 'millisecs))
 (prompt (strcat "\nTemps écoulé : " (rtos (/ (- t1 t0) 1000.) 2 3) " secondes"))

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut (gile), et merci pour cette réponse... Mais je doute du résultat.

 

Je l'ai chronométré à presque 9 secondes, Voici mon code (issu du tien) :

(setq ComptTmpDeb (getvar 'millisecs));Début du chronomètre
...
...
 (setq ComptTmpFin (- (getvar 'millisecs) ComptTmpDeb) ; Fin du chronomètre
       ComptTmp    (- ComptTmpFin ComptTmpDeb)
 ) ;_ Fin de setq
 (prompt (strcat "\nTemps écoulé : "
                 (itoa (setq h (/ ComptTmp 3600000)))
                 "h "
                 (itoa (setq m (/ (setq r (- ComptTmp (* h 3600000))) 60000)))
                 "m "
                 (rtos (/ (- r (* m 60000)) 1000.) 2 3)
                 "s"
         ) ;_ Fin de strcat
 ) ;_ Fin de prompt
 (prompt (strcat "\nSoit :         " (itoa ComptTmp) " millisecondes"))
 (prompt (strcat "\nSoit aussi :   " (rtos (/ ComptTmp 1000.) 2 3) " secondes"))

Et j'ai ces résultats :

Temps écoulé : 491h 47m 23.516s

Soit : 1770443516 millisecondes

Soit aussi : 1770443.516 secondes

 

J'ai cherché ou était le problème, mais je ne trouve rien...

 

J'espère ne pas avoir fais de bourde en copiant ton code...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Au temps pour moi... J'avais ça :

  (setq ComptTmpFin (- (getvar 'millisecs) ComptTmpDeb) ; Fin du chronomètre
       ComptTmp    (- ComptTmpFin ComptTmpDeb)
 ) ;_ Fin de setq

au lieu de ça :

  (setq ComptTmpFin (getvar 'millisecs)
       ComptTmp    (- ComptTmpFin ComptTmpDeb)
 ) ;_ Fin de setq

 

MILLE EXCUSES ! ! !

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Soit tu fais :

  (setq ComptTmpFin (getvar 'millisecs) ; Fin du chronomètre
       ComptTmp    (- ComptTmpFin ComptTmpDeb)
 ) ;_ Fin de setq

Soit tu fais directement la soustraction

  (setq ComptTmp (- (getvar 'millisecs) ComptTmpDeb))

 

Mais tu ne la fais pas deux fois...

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Oui, je viens de le voir...

 

Désolé de t'avoir fais perdre du temps...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

il y a bien un truc car 1.7 x10 ^6 ms ça fait effectivement qqs h

 

il doit y avoir un loup sur

(setq ComptTmpFin (- (getvar 'millisecs) ComptTmpDeb)

tu devrai pas choper ComptTmpfin comme tu a pris celui de départ avec un getvar tout simple et après faire la soustraction?

 

Mais ça n'explique pas l'inflation car en plus tu soustrais 2 fois... dans le code de (gile) il n'y a qu'une soustraction..

Posté(e)

Re. Du coup, voici un chronomètre pour ceux qui pourrait en avoir besoin :

;;;******************************
;;;          Chronomètre        *
;;; Merci à (gile) de CadXP.com *
;;;******************************
;;;   Déclanche le chronomètre  *
(defun c:DebutChrono ()
 (vlax-ldata-put "DenisH" "ComptTmpDeb" (getvar 'millisecs))
 (princ "\tDébut du chronomètre...")
 (princ)
) ;_ Fin de defun
;;;******************************
;;;     Arrête le chronomètre   *
(defun c:FinChrono ()
 (vlax-ldata-put "DenisH" "ComptTmpFin" (getvar 'millisecs))
 (princ "\tFin du chronomètre...")
 (setq ComptTmp (- (vlax-ldata-get "DenisH" "ComptTmpFin") (vlax-ldata-get "DenisH" "ComptTmpDeb")))
 (prompt (strcat "\tTemps écoulé : "
                 (itoa (setq h (/ ComptTmp 3600000)))
                 "h "
                 (itoa (setq m (/ (setq r (- ComptTmp (* h 3600000))) 60000)))
                 "m "
                 (rtos (/ (- r (* m 60000)) 1000.) 2 3)
                 "s"
         ) ;_ Fin de strcat
 ) ;_ Fin de prompt
 (princ)
) ;_ Fin de defun

Il se déclanche avec DebutChrono et s'arrête avec FinChrono depuis AutoCAD ou un autre Lisp, puis donne le résultat...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité