Bonjour,
Lors du traitement qui rempli la barre de progression la charge CPU augmente à 100%. Est-qu'il existe un moyen de diminuer cela duant mon traitement ?
Merci d'avance
Version imprimable
Bonjour,
Lors du traitement qui rempli la barre de progression la charge CPU augmente à 100%. Est-qu'il existe un moyen de diminuer cela duant mon traitement ?
Merci d'avance
Sans explications détaillées de ce que tu fais et le code qui va avec, non.
Je mettrais les codes plus tard je ne peux pas y accéder pour le moment.
En gros j'ai une copie de fichier et une boucle qui surveille la taille du fichier de destination et rempli 2 barre de progression (celui du fichier et le total).
Sur d'autres programmes (la copie de fichier avec nautilus et la commande cp) la charge CPU est bien de 100% également mais c'est principalement de la latence tandis que les charges système et utilisateur sont très faibles.
J'ai regardé dans les sources de nautilus et je m'y perd. En fait j'attend qu'on me dise non c'est pas la peine ou oui il existe tel ou tel solution. Les sources ne devraient pas êtres nécessaires mais je les posteraient quand même au cas où.
Merci de vos futurs réponses
Fais la mise à jour de la taille du fichier une fois toutes les secondes ou tous les 10èmes de secondes plutôt que de faire ça en permanence et ça devrait régler ton pb.
J'ai oublié de préciser que j'ai déjà essayé ça en faisant
J'ai tanté cette solution car mon prof d'info m'a dis d'essayer de ralentir la boucle. Si il existe d'autres solutions je suis preneur.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 int passer = 0; while([...]) { if(passer == 10000) //et même plus grand ça ne marche pas très bien { passer = 0; //remettre à zéro et poursuivre le traitement de la boucle } else { passer++; continue; //saute la boucle actuelle } [...] //le traitement des barres de progression etc... }
Fais la mise à jour de ta barre de progression dans le callback d'un g_timeout_add qui sera appelé toutes les secondes/10ème de seconde
il faut que tu fasse un sleep dans ta boucle.
Si tu veux updater toute les secondes tu fait un sleep de une seconde etc...
Les sleeps en général ça s'intègre mal avec la mainloop gtk+. Un sleep de 1s dans une fonction qui tourne dans le thread principal => un freeze de 1 seconde de l'interface graphique.
Oui j'ai déjà essayé les sleep(1) ça freeze ma barre de progression pour bien plus que 1 seconde.
Donc on en revient à http://www.developpez.net/forums/d70...e/#post4120707