Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TRAITEMENT DE TRAITEMENTS LONGS.


Information sur la source

Catégorie :Date & Heure Classé sous : progressbar, attente, traitement, heure Niveau : Débutant Date de création : 21/06/2007 Date de mise à jour : 22/06/2007 12:20:18 Vu / téléchargé: 4 118 / 517

Note :
Aucune note

Commentaire sur cette source (13)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
(Héhéhé, j'aime bien le titre...)

Salut,
Quand votre application doit effectuer des traitements longs, il y a quelques règles de bon sens à respecter :

1) Indiquer à l'utilisateur qu'un long traitement commence. C'est le minimum pour que l'utilisateur ne "tue" pas la tâche en disant 'encore un bazar qui plante...'
2) Lui indiquer par une barre de défilement que ça continue de bosser et que c'est pas planté au milieu du gué.
3) Si possible lui indiquer le temps restant. Pratique pour pipi, café...( j'en connais même un qui en profite souvent pour se mijoter un petit chili con carne...).
4) Lui permettre d'annuler le traitement en cours si c'est pas un grand patient.

J'ai donc regroupé toutes ces règles dans une unité (Wait) que vous pourrez utiliser à votre guise.
Dans Main, il y a quelques exemples d'utilisation et de mise en oeuvre.
Dans la pratique, on ne donnera bien sûr pas les choix proposés ici à l'utilisateur; ce qui simplifiera considérablement le code d'appel.

 

Conclusion

Inspiré des conseils de Olivier DAHAN dans son livre "Delphi 7 Studio".
Merci à lui.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

21 juin 2007 14:49:01 :
J'avais oublié la capture d'écran :s
21 juin 2007 15:04:06 :
Le serveur fait des siennes ;)
22 juin 2007 12:20:18 :
Ajout d'une simulation de téléchargement.

Commentaires et avis

signaler à un administrateur
Commentaire de John Dogget le 21/06/2007 14:59:12

Manquerait pas quelque chose par hasard :p ?

signaler à un administrateur
Commentaire de Loda le 21/06/2007 15:01:14

oui, il manquait la capture d'écran. MDR !

A+

Loda

PS: je regarderais ça avec attention quand il y aura les sources ;-)

signaler à un administrateur
Commentaire de John Dogget le 21/06/2007 15:11:53

Ben oui, il manque les sources (c'est pas rien) !!

:D

signaler à un administrateur
Commentaire de John Dogget le 21/06/2007 16:00:59

C'est mieux avec les sources :)

Concernant la sources, est ce que ce n'est pas mieux d'inclure ce genre de code directement dans les traitements que dans une unité à part ?

Je m'explique ...

Si je prends l'exemple simple d'une copie de fichier "custom" qui n'utilise pas les API.
Le temps indiqué et la progression peuvent dépendre de pleins de choses (charge CPU, fragmentation etc). Alors comment quelque chose d'externe à ces traitements pourrait'il etre au courant de tout ça ?

J'ai du mal à expliquer ce que je veux dire, je vous felicite si vous m'avez compris :D ...

signaler à un administrateur
Commentaire de Caribensila le 21/06/2007 16:10:55

Salut,

Bein, la progression est incrémentée par l'appel régulier d'une fonction de l'unité Wait, et ceci depuis la boucle provoquant l'attente. La progression reflète donc exactement ce qui est en train de se passer.

Si j'ai bien compris ce que tu voulais dire...  :)

signaler à un administrateur
Commentaire de Caribensila le 21/06/2007 16:27:58

... Je précise que le temps restant calculé n'est qu'une estimation. Mais cette estimation est évaluée à chaque pas du Timer. Elle pourra donc varier en fonction de la charge du CPU, par exemple.

signaler à un administrateur
Commentaire de Caribensila le 21/06/2007 16:40:05

...Ca me fait penser que mon application ne fonctionnera pas avec des TThreads...
Il faudra alors créer plusieurs fiches, une par Thread...

signaler à un administrateur
Commentaire de Caribensila le 21/06/2007 16:50:57

@ Florent:
Quand tu travailles sur Internet, par exemple, il est impossible d'évaluer le temps restant. Dans ce cas, tu ne peux dire à l'utilisateur qu'une tâche est en cours et éventuellement le renseigner sur l'avancement de la tâche.
Dans ces cas là, mon code ne donne que le temps écoulé depuis le début.
Il ne peut pas faire l'impossible, hélas...  ;)

"Pour le calcul du temps restant: pour être davantage précis, il faudrait se baser sur les dernières secondes écoulées du calcul."
Je vais y réfléchir... :)))

signaler à un administrateur
Commentaire de Caribensila le 21/06/2007 17:08:18

De toute façon, sur Internet, les estimations sont toujours hautement fantaisistes. Et je ne vois pas comment on pourrait les affiner a priori.
Mais ça vaut le coup d'y réfléchir. C'est intéressant.  :)

signaler à un administrateur
Commentaire de Caribensila le 22/06/2007 12:43:52

Je me trompe peut-être, mais il me semble que beaucoup d'entre vous ont des doutes sur ce code  ;)

Donc, pour en avoir le coeur net, j'ai fait une MAJ en ajoutant une simulation de chargement de fichier sur Internet.

Conclusion, après quelques estimations fantaisistes dans les premières secondes, l'application donne une estimation très correcte du temps restant. Et plus le temps passe, plus l'estimation s'affine.
Après réflexion, il ne semble pas qu'on puisse faire plus précis.

En espérant avoir dissiper quelques doutes...  :)

signaler à un administrateur
Commentaire de Caribensila le 22/06/2007 14:56:49

"(pas idiot non plus le type ^^)"
C'est une pensée qui ne m'a jamais effleuré !  :)
D'autant que tu as parfaitement compris le truc de ce code. Et je te remercie de t'être penché autant sur mon travail.

Pour ce qui est des applications threadées, j'avoue que ça dépasse encore mes limites. Je n'ai jamais eu vraiment besoin d'y avoir recours (sauf pour des connexions TCP/IP). Et comme je n'ai aucune base en info et que je suis autodidacte, j'ai besoin de me retrouver devant une situation concrète.
Nul doute que ça viendra un jour, mais pour le moment...

Je suppose que ce sera un problème de synchronisation des tâches. Et peut-être que dans ce cas, un traitemennt du problème spécifique à l'application sera plus optimisé. Je ne sais pas, en fait. J'y reviendrai lorsque j'aurai fait qq progrès de ce côté-là, ok?  ^ ^

signaler à un administrateur
Commentaire de Delphiprog le 23/06/2007 22:58:12 administrateur CS

Salut à tous,

"Pour ce qui est des applications threadées, j'avoue que ça dépasse encore mes limites."
Je crois que c'est davantage une question d'appréhension que de difficultés techniques tant la mise en oeuvre avec Delphi est simple. Il suffit d'éviter quelques pièges grossiers et l'on obtient une application qui continue de répondre même en cas de traitement long. Par ce côté, ça rassure déjà l'utilisateur final.

Tu t'est inspiré du code d'Olivier DAHAN : je vois que monsieur a de bonnes lectures :)
Mais ce code, et vous êtes plusieurs à l'avoir fait remarquer, est conçu pour un usage simple et rapide. Il ne saurait régler tous les cas possibles.

Je suis assez étonné que personne n'ait mentionné l'utilisation de callbacks, encore plus simples à mettre en oeuvre pour un résultat plus facilement personnalisable. En effet, tant qu'on transmet une fonction ou une méthode dont la signature correspond à celle attendue par la fonction appelée, on peut faire varier les effets d'une progression sans avoir à concevoir de fiches spécifiques.
Enfin, peut-être que cetet notion de fonction callback est quelque chose qui se perd...
Après tout, pourquoi faire simple quand on peut faire compliqué ? :(

signaler à un administrateur
Commentaire de Delphiprog le 23/06/2007 22:59:42 administrateur CS

Ah oui, j'allais oublier : quand on réalise une application console, il n'y a guère moyen de faire autrement que de faire appel à ces fameuses fonctions de callback (no forms !)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

D6 :attente utilisateur lors du lancement d'un traitement [ par ema29 ] Bonjour,J'ai une fenêtre delphi qui permet de lancer un traitement qui peut prendre quelques minutes et j'aimerais que l'utilisateur voit quelque chos Application en background en attente d'une combinaison de touches [ par K0rr1gan ] Bonjour,Je cherche a créer une application se comportant plus ou moins comme un service, c'est a dire en exécution permanente, éventuellement sous for ProgressBar [ par bmwalid ] salutcomment faire un ProgressBar dans un StatusBar comme cel de internet explorer ?merci progressbar avec une musique [ par ced55957 ] cedricbonjour j'aimerai savoir comment on fait pour faire avancer un progressbar en fonction de la musiqueex: debut musique, progress bar a 0 fin ProgressBar avec un batchmove [ par oluha ] Bonjour !J'aimerai savoir s'il est possible d'appliquer une progressbar sur un batchmove ?Je ne vois pas trop comment faire... Merci ! :) ProgressBar et procédure stockée [ par oluha ] Bonjour j'aimerai savoir s'il est possible d'utiliser une progressbar avec une procédure stockée contenant une boucle. Je ne pense pas que c Afficher un "chronometre" [ par oluha ] BonjourJe souhaiterai afficher une sorte de chronomètre dans mon form, c'est à dire qu'il affiche le temps écoulé pour l'execution Progressbar sur la lecture d'une table [ par rickless ] Bien le bonjour,J'ai regardé tous les exemples de progress bar.Tous ce passe sur une minuterie ou des nombres préparer à l'avance.Mon p à l'aide, recherche d'algo de traitement d'images [ par czone29 ] Bonjour,je suis à la recherche d'algorithmes de traitement d'images comme le plus proche voisin, l'interpolation bilinéaire et la convolutio simple question [ par jeckman ] je cherche a faire a faire un logiciel en DELPHI ! Mais je ne voit pas comment m'y prendre pour faire ça ! Je vais vous expliquer ! Je travai


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,796 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.