12 | |||||||||||
Auteur | Messages | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
caracole | #1 Posté le 14/12/2010 à 23:28:00 | ||||||||||
Bonjour, Lors de l'utilisation de ces deux commandes, j'aimerai pouvoir afficher une barre de progression- Est-ce possible ? Si oui, comment ? J'ai lu dans la documentation Shell que si WAIT est precisé dans la commande, celle-si s'effectue en arriere plan. comment savoir dans gambas que la commande est terminée ? Merci | |||||||||||
manu | #2 Posté le 15/12/2010 à 10:56:00 | ||||||||||
Avec Gambas ca roule ! | Oui c'est possible. Pour qu'une barre de progression fonctionne, il faut d'une part connaitre la durée ou les octets, ou le nombre de passage a faire durant le traitement et d'autre part pouvoir incrémenter la valeur de la barre de progression avec une boucle en générale. Pour te répondre précisément, il faut donc que l'on connaisse le traitement à réaliser ! Jeanne d'arc, elle a frit, elle a tout compris ! Config : Manjaro linux (excellent !) XFCE 4.1 (simple et efficace) Gambas 3 dans les dépots (confort total) | ||||||||||
caracole | #3 Posté le 15/12/2010 à 12:24:00 | ||||||||||
Oui c'est possible. Bien. Voici un exemple qui me permet de compiler un projet J'aimerai pouvoir durant tout le traitement afficher une barre de progression ou ( autre chose ) qui me permette Visuellement de savoir que le traitement est en cours et non un blocage. Il me parait difficile ( voire impossible ) d'évaluer le temps .... J'ai pensé a l'usage du timer, mais je ne sais pas tres bien comment gerer les flux du shell par ailleurs EXEC conviendrait-il mieux que SHELL ? Merci. Pierre ( caracole )
| |||||||||||
manu | #4 Posté le 15/12/2010 à 14:11:00 | ||||||||||
Avec Gambas ca roule ! | rhaaaa ! J'ai travaillé sur un projet comme ca, mais je n'ais pas trouvé la solution car on ne connais pas la durée total de la compilation, elle dépend de ton ordi et de la compilation proprement dite. D'autre par, il te faut utiliser les process : voila un bout de code que j'ai fait mais qui est plein d'imperfections mais regarde bien l'utilisation des process qui elle, est corecte :
Je vois deux pistes un peu foireuses cependant : 1- Tu rajoutes une BDD à ton projet dans lequel tu stock le temps de la dernière compile. La fois suivante tu fais référence a la durée de la dernière compilation. Bonjour le boulot pour une barre de progression ! 2- Tu estimes une durée de la manière que tu veux et et la divisde par exemple en 10. Tu fait une boucle qui incrémente de 10 % ta barre de progression le 10 passage tu ne la déclenche qu'a la fin du processus et tu met 100 % (au cas ou au bout de 3 passage de boucle la compil sois fini) :). C'est pas très précis non plus mais ca fait patienter ! Jeanne d'arc, elle a frit, elle a tout compris ! Config : Manjaro linux (excellent !) XFCE 4.1 (simple et efficace) Gambas 3 dans les dépots (confort total) | ||||||||||
caracole | #5 Posté le 15/12/2010 à 14:40:00 | ||||||||||
Merci Manu, Je vais copier le code et essayer de comprendre .... Merci | |||||||||||
manu | #6 Posté le 15/12/2010 à 19:17:00 | ||||||||||
Avec Gambas ca roule ! | bon le code ne gère pas que la barre de progression, c'est un projet en cours et très imparfait. Il sert en fait a faire un update SVN (première étape) puis lance la compile. N’hésite pas a me demander. je pourrais aussi épurer mon code pour répondre uniquement à ta question mais je t'ai répondu vite fait, je passais par là... Bonne soirée, j'ai quelque chose à fêter moi ce soir Jeanne d'arc, elle a frit, elle a tout compris ! Config : Manjaro linux (excellent !) XFCE 4.1 (simple et efficace) Gambas 3 dans les dépots (confort total) | ||||||||||
caracole | #7 Posté le 15/12/2010 à 19:30:00 | ||||||||||
bon le code ne gère pas que la barre de progression, c'est un projet en cours et très imparfait. Il sert en fait a faire un update SVN (première étape) puis lance la compile. Justement Manu, c'est ce que je suis aussi en train de faire. Suis retraité et débutant en Gambas cependant, j'ai beaucoup pratiqué VB depuis l'existence de Miro-Soft ce qui veut dire pas mal d'années ! J'ai un embryon de quelque-chose qui tourne mais j'aimerai que ce soit un peu plus convivial. Ce que je cherche surtout c'est d'avoir un outil qui évite de mettre les mains dans 'le cambouis' ! merci pour les conseils Pierre | |||||||||||
linuxos | #8 Posté le 16/12/2010 à 00:05:00 | ||||||||||
Un peu de sel, de poivre et la crevette sera... | Bonsoir Caracole, En effet ce genre de traitement n'est pas facile. Tout d'abord il faut executer ta commande SHELL ou EXEC sous forme de process en lecture (READ). De cette manière, ta commande sera exécutée en tache de fond et chaque fois que du texte sera renvoyé par ta commande comme une sortie texte dans un shell, un évènement remontera dans Gambas et tu pourra ainsi traiter chaque ligne qui te sera renvoyé. A) Le process PUBLIC SUB Executer_Commande() DIM sProcessCompil as Process DIM CompilCmd as String ' Lancement du Process Compil CompilCmd = "....commande a exécuter ......" ProcessCompil = SHELL CompilCmd FOR INPUT Object.Attach(ProcessCompil, ME, "ProcessCompil") END PUBLIC SUB ProcessCompil_Read() ' Événement lorsque la commande CompilCmd remonte du texte DIM sLine AS String LINE INPUT #LAST, sLine echo sLine END PUBLIC SUB ProcessCompil_Kill() ' Événement quand le Process CompilCmd est terminée ou tué END PUBLIC SUB ProcessCompil_Error(erreurTexte AS String) ' Événement lorsque la commande CompilCmd remonte une erreur IF erreurTexte LIKE "Timeout:*" THEN echo "Erreur du Process: Timeout !" ' Exemple de traitement d'erreur END IF END B) La barre de progression: En ce qui concerne la barre de progression, si tu connais le nombre de phase durant ta compilation, tu peux t'en servir comme unité de découpage de ta barre de progression et ensuite tester dans la Procédure 'ProcessCompil_Read()' si tu vois passer des mot clé comme 'Pre-compilation, Compilation, linkage, etc,...) pour faire avancer ta barre de progression. Voila c'est une idée que j'ai utilisé plusieurs fois et cela marche plutôt bien. En cas de plantage de ta commande, celle-ci renverra un 'EXIT 1' ou code 1 en shell qui montera automatiquement l’événement dans Gambas: PUBLIC SUB ProcessCompil_Error(erreurTexte AS String) Si tu as des questions n'hésite pas. Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. | ||||||||||
Gamuti | #9 Posté le 16/12/2010 à 23:34:00 | ||||||||||
Et si simplement tu fais : - Une barre de progression qui s'incrémente uniquement à la fin du traitement de chaque SHELL - Une icône qui tourne indiquant à l'utilisateur que ça mouline - Un bouton qui permet d'afficher le terminal (reste à savoir comment faut-il faire) à la demande. | |||||||||||
caracole | #10 Posté le 16/12/2010 à 23:43:00 | ||||||||||
Et si simplement tu fais : Oui bien sur pourquoi pas une icone ( un gif qui tourne ) ca doit bien se trouver quelque-part comme le sablier ....faut-il encore chercher . je n'ai plus wind'ose | |||||||||||
linuxos | #11 Posté le 16/12/2010 à 23:57:00 | ||||||||||
Un peu de sel, de poivre et la crevette sera... | Bien sur il y a plus simple que d'utiliser des Process... Tu fais juste comme ça: * Application.Busy = 1 * SHELL = ".... commande a executer....." WAIT * Application.Busy = 0 et le curseur de la souris changera d'aspect en OCUPPE ..... Il me semblait de comprendre les Process ouvrerai la porte a plein de chose ... mais je me suis trompé .... autant pour moi... Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. | ||||||||||
manu | #12 Posté le 17/12/2010 à 08:07:00 | ||||||||||
Avec Gambas ca roule ! | Alors si c'est cela, une icone qui tourne pour faire patienté il y a encore vraiment plus simple, on modifie l'aspet de la souris (je le fait d'ailleurs dans mon bout de code) : Avant le shell on transforme l'icone en icone d'attente et après on la remet la souris par default : Un truc du style : me.mouse = 3 '3 est la valeur de mouse qui montre un curseur type sablier , qui dit que ça travail.... shell "montraitement" me.mouse=1 ' Valeur de la mouse par Default Tout simplement mais on est très loin de la barre de progression là Quand a l'idée d'une barre de progression par shell, ça va avancer de 30 % a chaque fois, ça va pas être très joli ni très intéressant pour l'utilisateur. Travailler sur les process me parais beaucoup plus intéressant en terme de résultat et d'apprentissage, non ? Jeanne d'arc, elle a frit, elle a tout compris ! Config : Manjaro linux (excellent !) XFCE 4.1 (simple et efficace) Gambas 3 dans les dépots (confort total) | ||||||||||
linuxos | #13 Posté le 17/12/2010 à 08:16:00 | ||||||||||
Un peu de sel, de poivre et la crevette sera... | Manu, Je crois que nous décrivons la même chose..... me.mouse = 3 '3 est la valeur de mouse qui montre un curseur type sablier , qui dit que ça travail.... c'est pareil que: * Application.Busy = 1 olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. | ||||||||||
manu | #14 Posté le 17/12/2010 à 08:21:00 | ||||||||||
Avec Gambas ca roule ! | oui t'as raison .... je l'ai vu après .. On va dire que ce sont 2 chemins differents pour le meme resultat Jeanne d'arc, elle a frit, elle a tout compris ! Config : Manjaro linux (excellent !) XFCE 4.1 (simple et efficace) Gambas 3 dans les dépots (confort total) | ||||||||||
Gamuti | #15 Posté le 17/12/2010 à 09:17:00 | ||||||||||
Une autre solution s'offre à nous pour l'utilisation d'un SHELL sans utiliser de WAIT Tu peux renvoyer le résultat de ce qu'exécute un SHELL vers un fichier TEXT. Cela donnera un code ressemblant à ceci :
Comme le SHELL exécute une commande shell en arrière plan, c'est-à-dire, que le shell rend la main à l'interpréteur, tu peux exécuter une boucle sans fin, à intervalles réguliers, pour tester la présence du fichier RESULTAT.TXT, à l'aide d'un Timer :
Ensuite, il faut tester le contenu de ton fichier RESULTAT.TXT :
J'utilise beaucoup ce genre de procédure pour réaliser ce genre de barre de progression. Seul inconvénient : Il faut que tu sache le contenu de ce que te renvoi le MAKE pour que tu puisses rajouter des capteurs dans ton fichier RESULTAT.TXT Personnellement, cette procédure m'est très utile pour récupérer des images sur le net. J'utilise la méthode WGET dans un SHELL car le WGET retourne dans un fichier texte la progression en pourcentage du fichier en cours de téléchargement. Exemple :
Partant de ce genre de procédure, le WGET me retourne ce genre de texte, qui devient très facile à exploiter car une liste de progression est enregistrée :
| |||||||||||
12 |