Gambas France BETA


Pas de compte ? Incription

Le temps de faire....

1
AuteurMessages
Foromus#1 Posté le 25/12/2023 à 19:24:21
Bonjour à tous,

Les festivités de Noël étant sur le point de se terminer, remettons-nous à l'ouvrage...
J'espère que vous avez passé une bonne fête !
Bon, un truc qui me gêne :
Soit une routine qui demande un "certain temps", comme une recopie ou examen de fichiers.
La commande qui lance l'action démarre ladite, laquelle s'exécute. Naturellement, la commande est suivie d'autres commandes, et je constate que ces commandes suivantes ont tendance à s’exécuter, avant que la commande précédente ne soit totalement terminée. Ex : je fais un tri de fichiers, et je veux afficher "Tri terminé avec succès" si succès il y a. Le problème, c'est que le message de succès s'affiche alors que l'opération n'est pas encore terminée !
J'espère m'être expliqué le mieux possible.
Y aurait-il une solution possible ? Un wait est utilisable, mais guère adéquat, en fait, on ne sait pas combien de temps l'opération va prendre...
Merci !
valaquarus#2 Posté le 25/12/2023 à 20:22:33
-- Unus Ex Altera --Bonsoir,
malheureusement Wait dans un shell permet d'attendre que la commande du shell se finisse avant de passer à la commande suivante.
Shell
Valaquarus

Si c'est juste le fait de ne pas savoir où en est la commande du shell de son exécution, je te proposes un astuce pour "voir" que la commande travaille :

1
2
3
4
5
6
7
8
9
10
11
12
13
WHILE hProc.state = hProc.Running
MouseWait()
FMain.dTemps = Time(0, 0, 0, CInt(Timer - ClamScan.Depart) * 1000) 'clic en millisecondes * 1000 = secondes
FMain.txSalida3.Text = (" Trabajo en curso... ") & "[ " & FMain.dTemps & " ] "
i += 1 'incrément de i
IF i > j THEN 'j=longueur de la ligne terminal 2
i = 0 'remise à zéro de i
FMain.txSalida2.Clear
ENDIF
WAIT 1 'boucle évènement d'une seconde
FMain.txSalida2.Text &= "#"
IF hProc.State = hProc.Stopped THEN BREAK 'garantie de sortie de boucle (inutile?)
WEND

Tu trouvera l'intégralité du code ici : ClamScanGui
Système d'exploitation : KDE neon 6.0.2 ~ Version Gambas : 3.19.90
Foromus#3 Posté le 26/12/2023 à 12:19:51
Bonjour,

Merci pour cette réponse.
Un moment, j'avais aussi pensé à un boucle "do loop", problème : quelle condition de sortie ?
Je remarque que dans l'utilisation de l'OS au quotidien, on a souvent en fenêtre qui indique l'avancement du processus, voire un décompte du temps restant. C'est le cas lors d'un transfert de fichiers par exemple, ou autre action. J'en déduis donc que les concepteurs ont bien du trouver un moyen pour calculer cet avancement, c'est pourquoi j'ai lancé ma question.

Edit : Ayant trouvé LA condition de sortie, j'ai utilisé une Do Loop. Pour l'instant, ça marche sur les essais en nombre réduit, je verrai plus tard avec une série importante.
Cela dit, c'est une solution purement ponctuelle, il est peu probable qu'elle soit transposable dans un autre contexte.
spheris#4 Posté le 4/1/2024 à 23:44:48
Foromus,
Te serait-il possible de nous mettre en exemple la dite routine que tu veux lancer?
Je peux ainsi par ce biais te modifier légèrement ton code pour que ton message apparaisse bien après cette routine.
;)
1