Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Barre de progression

7 réponses
Avatar
WebAutoSubscriptions
Bonjour,

je travaille sur une appli qui indexe le contenu d'un r=E9pertoire dans
une base de donn=E9es.
L'algo rentre dans un dir, compte les fichiers, stocke en db et
parcourt le reste des sous-rep et ainsi de suite.
Je cherche =E0 faire une barre de progression ms mon pb est le suivant :
qd je rentre dans un r=E9pertoire, qui contient disons que j'ai 5
fichiers et 1 sous-rep.
La progression est =E0 0 au d=E9but normal.
Je boucle et ma progression est donc de 1/5 puis 2/5
j'arrive =E0 mon sous dossier qui contient 99 fichiers par ex donc, je
passe =E0 :
6 (5 fich + 1 rep) / (6 + 99) -> la progression totale redescend, ce
qui est logique, au regard de ce que l'appli a d=E9couvert dans le sous-
r=E9pertoire.

Mon pb : le user va =EAtre troubl=E9 de voir sa progression passer de 20%
- 40% - 60% - 80% et boum, d'un seul coup =E0 10 % environ ....
Par rapport =E0 une progression classique, je ne sais pas =E0 l'avance
combien j'ai de fichiers =E0 traiter, j'avais pens=E9 faire un premier
thread de pr=E9-scannage ms ca peut =EAtre longuet -> pas terrible...
Windows fait un genre de truc pareil avec sa "pr=E9paration de la copie"
ms j'ai pas trop d'id=E9es alors si qqun a une id=E9e... je vous en
remercie d'avance ...

Cdlt,

7 réponses

Avatar
Sylvain SF
wrote on 02/08/2008 23:05:

Par rapport à une progression classique, je ne sais pas à l'avance
combien j'ai de fichiers à traiter, j'avais pensé faire un premier
thread de pré-scannage ms ca peut être longuet -> pas terrible...
Windows fait un genre de truc pareil avec sa "préparation de la copie"
ms j'ai pas trop d'idées alors si qqun a une idée... je vous en
remercie d'avance ...



windows fait cette débilité en effet avec le quasi-doublement du temps
de process comme conséquence.

MacOS 7 (déjà) affichait une barre de progression infinie sous forme
de chevrons animés (<http://cjoint.com/?ida3hEGqyF>), cela reste la
meilleure façon pour un process de temps indéterminé.

or barre de prog., tu peux également afficher le nombre (global) de
fichiers traités, l'utilisateur verra que le soft tourne toujours.

Sylvain.
Avatar
Christian Laborde
Cela dit, explorer les sous répertoires et compter le nombre de fichiers ne peut
prendre beaucoup de temps.
Salut.

Sylvain SF a écrit :
wrote on 02/08/2008 23:05:

Par rapport à une progression classique, je ne sais pas à l'avance
combien j'ai de fichiers à traiter, j'avais pensé faire un premier
thread de pré-scannage ms ca peut être longuet -> pas terrible...
Windows fait un genre de truc pareil avec sa "préparation de la copie"
ms j'ai pas trop d'idées alors si qqun a une idée... je vous en
remercie d'avance ...



windows fait cette débilité en effet avec le quasi-doublement du temps
de process comme conséquence.

MacOS 7 (déjà) affichait une barre de progression infinie sous forme
de chevrons animés (<http://cjoint.com/?ida3hEGqyF>), cela reste la
meilleure façon pour un process de temps indéterminé.

or barre de prog., tu peux également afficher le nombre (global) de
fichiers traités, l'utilisateur verra que le soft tourne toujours.

Sylvain.



--
Christian Laborde
La Révolution citoyenne, c'est sur : http://c.lab.over-blog.com/
Le forum des électrons libres : http://electrons-libres.forumactif.fr
True E-mail : remove -no-spam-
Rte de la Conversion, 20
CH 1095 Lutry
Suisse
Avatar
Sylvain SF
Christian Laborde wrote on 03/08/2008 13:53:
Cela dit, explorer les sous répertoires et compter le nombre de fichiers
ne peut prendre beaucoup de temps.



"ne peut prendre" doit être lu comme "peut ne pas prendre bcp de temps"?

si c'est le cas, c'est à dire s'il y a peu de fichiers à copier, la
barre de progression servira généralement à rien car le process complet
sera généralement rapide, dans ce cas la fenêtre de progression ne
devrait pas êre affichée du tout - inutile de faire clinoter une fenetre
que l'on n'a pas le temps de lire, celle-ci ne doit apparaitre qu'après
un certain de temps (3 à 8 sec.) si le temps restant est significatif.
(ok, il y a toujours le cas du fichier unique de plusieurs giga, vous
savez si vous êtes dans ce cas ou non).

dans les autres cas, nombreux fichiers dans de nombreux sous-répertoires
ce temps d'exploration est très loin d'être négligeable.

la solution à retenir n'est pas technique mais plus dictée par le type
d'utilisateur, s'ils veulent un traitement rapide, évitez la barre et
le temps d'exporation, s'ils préfèrent les machins qui clignotent,
mettez cette barre.

Sylvain.
Avatar
Emmanuel Bourg
Tu peux aussi faire les deux en même temps

- un premier thread qui scan les fichiers et fait le vrai boulot

- un deuxième thread qui scan les répertoires pour compter le nombre de
fichiers.

Tant que le 2eme threads n'a pas terminé ta barre de progression tourne
en mode indéterminé, et dès qu'elle a terminé tu affiches la progression
réelle.
Avatar
WebAutoSubscriptions
Bonsoir et merci pour vos réponses.
J'avais implémenté la dernière solution avec 2 threads, le pb est que
cela fait faire inutilement la navette à la tête de lecture sur le
disque -> Le process met bcp de plus de temps, finalement. (je cite :
quasi-doublement du temps
de process comme conséquence. )

Il s'agit en fait de dizaines de fichiers sur un dvd.

La barre de progression infinie me plaît bien, finalement à l'usage :)
Car le process peut être assez long en effet.

Je n'ai donc pas loupé la solution miracle, je suis content :)

Merci à tous et bonne soirée !
Avatar
Emmanuel Bourg
a écrit :
Bonsoir et merci pour vos réponses.
J'avais implémenté la dernière solution avec 2 threads, le pb est que
cela fait faire inutilement la navette à la tête de lecture sur le
disque -> Le process met bcp de plus de temps, finalement. (je cite :
quasi-doublement du temps
de process comme conséquence. )



A réessayer dans 10 ans quand nous aurons tous des SSD dans nos
ordinateurs :)
Avatar
Sylvain SF
a écrit :

A réessayer dans 10 ans quand nous aurons tous des SSD dans nos
ordinateurs



un disque à techno statique aiderait, le file system lui-même peut
également aider, par exemple si les entrées répertoires stockaient
le nombre de sous-élements et leur taille totale; même si sur fclj
la solution risque de ne pas être OS indépendante.

Sylvain.