DenisHen Posté(e) le 25 avril 2017 Posté(e) le 25 avril 2017 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)
PHILPHIL Posté(e) le 25 avril 2017 Posté(e) le 25 avril 2017 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
DenisHen Posté(e) le 25 avril 2017 Auteur Posté(e) le 25 avril 2017 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)
DenisHen Posté(e) le 25 avril 2017 Auteur Posté(e) le 25 avril 2017 (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)
Patrick_35 Posté(e) le 25 avril 2017 Posté(e) le 25 avril 2017 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))) ResultatElapsed milliseconds / relative speed for 131072 iteration(s): (1+ 1)......1531 / 1.06 <fastest> (+ 1 1).....1625 / 1 <slowest> @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 25 avril 2017 Auteur Posté(e) le 25 avril 2017 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)
DenisHen Posté(e) le 25 avril 2017 Auteur Posté(e) le 25 avril 2017 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)
(gile) Posté(e) le 25 avril 2017 Posté(e) le 25 avril 2017 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
DenisHen Posté(e) le 25 avril 2017 Auteur Posté(e) le 25 avril 2017 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.516sSoit : 1770443516 millisecondesSoit 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)
DenisHen Posté(e) le 25 avril 2017 Auteur Posté(e) le 25 avril 2017 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)
(gile) Posté(e) le 25 avril 2017 Posté(e) le 25 avril 2017 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
DenisHen Posté(e) le 25 avril 2017 Auteur Posté(e) le 25 avril 2017 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)
x_all Posté(e) le 25 avril 2017 Posté(e) le 25 avril 2017 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.. quelques trucs sur autocad
x_all Posté(e) le 25 avril 2017 Posté(e) le 25 avril 2017 oups je me suis fait grillé... il faut dire que là ou je met 15 *10^12 ms à essayer de comprendre un code, il y en a qui lise le lisp comme si c'était une bd... :) quelques trucs sur autocad
DenisHen Posté(e) le 25 avril 2017 Auteur Posté(e) le 25 avril 2017 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 defunIl 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)
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant