begin process at 2012 02 11 12:07:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date & Heure

 > TRAITEMENT DE TRAITEMENTS LONGS.

TRAITEMENT DE TRAITEMENTS LONGS.


 Information sur la source

Note :
Aucune note
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 987 / 596

Auteur : Caribensila

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
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

Les Membres Club peuvent 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.

 Sources du même auteur

Source avec Zip Source avec une capture LE CERCLE ENCHANTÉ D'ANDRES GÎT EN NOS MÉMOIRES
Source avec Zip Source avec une capture AUSSI PRATIQUE QUE CANVAS.PIXELS[ ] MAIS JUSQU'À 450 FOIS PL...
Source avec Zip LE CRIME PARFAIT
Source avec Zip Source avec une capture ET ALLEZ HOP ! *.INI, *.DAT, *.BIN, ETC... TOUS DANS LE *...
Source avec Zip Source avec une capture LES FIBERS : DES THREADS NON PRÉEMPTÉS PAR LE SYSTÈME

 Sources de la même categorie

Source avec Zip Source avec une capture SIMPLE HORLOGE ANALOGIQUE par hamza
Source avec Zip Source avec une capture MÉMO V1.0.0 par Christophe67
Source avec Zip Source avec une capture AGENDA HEBDO par dubois77
Source avec Zip Source avec une capture PAQUES 1.0.0 par Christophe67
Source avec Zip Source avec une capture TIMESERVER V1.0.3 par Christophe67

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture MUSIC PRO COMPOSANTS par Francky23012301
Source avec Zip Source avec une capture TIMESERVER V1.0.3 par Christophe67
Source avec Zip Source avec une capture THREAD ET BITMAP (DESSIN AU CRAYON) par barbichette
Source avec Zip Source avec une capture UN CHRONOS SIMPLE AVEC UN COMPOSENT LABEL ANIMÉ par jackalunion
Source avec Zip Source avec une capture SHUTDOWN / RÉVEIL STYLE DOS par mighty_warrior

Commentaires et avis

Commentaire de John Dogget le 21/06/2007 14:59:12

Manquerait pas quelque chose par hasard :p ?

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 ;-)

Commentaire de John Dogget le 21/06/2007 15:11:53

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

:D

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 ...

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...  :)

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.

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...

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... :)))

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.  :)

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...  :)

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?  ^ ^

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é ? :(

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,905 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales