Conseil sur l'utilisation des threads [Résolu]

John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention - 24 sept. 2007 à 18:36 - Dernière réponse : John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention
- 25 sept. 2007 à 22:03
Bonjour à tous.

Je voudrais mettre à jour ma source déposé ici (http://www.delphifr.com/codes/GENERATEUR-ALEATOIRE-FICHIER_44115.aspx) en ajoutant quelques fonctions.
Notemmant l'ajout d'une fenetre qui indique la progression des operations en cours.

Comme la création de fichier a tendance à vampiriser les ressources, la mise à jour de la progression est problematique dans la mesure où elle fait perdre beaucoup de temps à l'application.

D'où mon idée d'utiliser un thread pour la mise à jour.

A votre avis, est'il preferable d'utiliser un thread pour la création du fichier (gros consommateur de ressource) ou bien pour la mise à jour de la progression (source de lenteur) ?
En sachant que la création du fichier sera limité à un moment par la vitesse d'ecriture sur le disque ...

J'attends vos conseils zéclairés
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 24 sept. 2007 à 19:46
3
Merci
Salut !

En toute logique, si tu crée un thread en plus de celui qui est géré par la VCL, c'est pour faire du travail... pas pour afficher !
Et ce, d'autant plus que les méthodes de la VCL nécessitent d'être d'appelées depuis le thread principal.

En résumé:
<ol><li>Le thread principal: pour l'affichage (normal quoi).</li><li>Le deuxième thread: pour le travail.</li></ol>Concrètement:
<ol><li>Tu crée un TThread pour créer ton fichier, lequel communiquera au thread principal de se mettre à jour.</li><li>Pour la communication, le plus simple (et le plus sûr) : Synchronize(). C'est aussi le plus lent, donc ne rafraîchit l'affichage toutes les secondes par exemple (en gardant en mémoire un Tick que tu compares).</li><li>Si tu veux te tenter aux messages de rafraîchissements, et autres artifices de mémoire partagér, c'est à tes risques et périls...
</li></ol>++
Flo
Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.nethttp://te%3C/body

Merci florenth 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de florenth
John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention - 24 sept. 2007 à 19:53
0
Merci
Merci à toi, je vais faire comme ça
Commenter la réponse de John Dogget
John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention - 24 sept. 2007 à 19:57
0
Merci
J'ai une autre question

Pourquoi ne pas utiliser un TTimer pour l'affichage, au lieu d'un Tick (avec getthickcount j'imagine) ?

C'est plus rapide, plus elegant, mieux ?
Commenter la réponse de John Dogget
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 25 sept. 2007 à 09:03
0
Merci
salut,

le TTimer te crée pas mal de trucs derrière et utilise des ressource system plus importante qu'un simple gettickcount. aussi, un ttimer est asycrone avec ton thread, tantdis que tu choisit le moment de lire le gettickcount.

aussi, tu peux ne rafraichir l'affichage que tout les 2 fichiers ou n'import quel autre condidtions que tu trouve adaptée.

bon code,

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Commenter la réponse de cs_Loda
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 25 sept. 2007 à 16:44
0
Merci
A réfléchir car si le fichiers font 2 Go chacun, ça risque d'être long !
De la même façon, s'ils font 10Ko, tu auras trop de rafraîchissements (ça caille après, quoi !).

Mais le problème du rafraîchissement reste entier, surtout si, comme japee s'y est déjà tenté, on veut pouvoir afficher non seulement l'avancement mais aussi le temps restant et permettre l'abandon de l'utilisateur (chose qu'il faut toujours prévoir... l'utilisateur est impatient).
J'ai déjà essayé plusieurs techniques, mais sans réel succès.
Là, en écrivant le post, je viens d'avoir une idée...

++
Flo

Ressources Delphi, sources, tutoriaux, actu, ...: www.mx-dev.nethttp://te%3C/body
Commenter la réponse de florenth
John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention - 25 sept. 2007 à 17:35
0
Merci
Pour l'instant j'avais pas prevu de mettre un temps restant ou une possibilité d'annuler les operations.
Mettre correctement le thread en place sera déjà un bon début
Commenter la réponse de John Dogget
John Dogget 390 Messages postés vendredi 18 juin 2004Date d'inscription 7 mai 2009 Dernière intervention - 25 sept. 2007 à 22:03
0
Merci
Voilà, j'ai mis mon code à jour.
Le résultat est pas trop mal je pense

J'atteinds 10 Mo/sec en écriture, mais peut être qu'il est possible d'optimiser encore l'algo pour aller plus vite, je suis pas un pro.

A vous de me dire ce que vous en pensez

Mon code est ici : http://www.delphifr.com/codes/GENERATEUR-ALEATOIRE-FICHIER_44115.aspx
Commenter la réponse de John Dogget

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.