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

[WD10-50o] Utilisation très importante des ressources

16 réponses
Avatar
marcel
Salut !

Je suis devant un problème que je ne comprends pas.
Un programme en cours de développement, mais déjà en production, utilise
jusqu'à 95% des ressources processeur et ce,tant en mode Debug qu'en mode
Executable.
Et ce, alors qu'il est juste dans la fenêtre principale de l'application
(mère midi), en attendant que l'utilisateur fasse son choix.
A ce moment, il y a un timersys qui rafraichit toutes les secondes la barre
de message (affichage de Num si Numlock est enfoncé) et un second timersys
qui vérifie la valeur d'un record dans un fichier HF en mode CS toutes les
30 secondes.
Si on ouvre une fenêtre (fille midi) de l'application, les performances sont
correctes, on ne constate pas vraiment de ralentissement et, c'est que je ne
comprends pas, l'usage du processeur diminue !
Dès que le programme attend un imput, la consommation en ressources
processeur remonte !
Bref, j'ai un programme qui utilise plus le processeurs quand il ne fait
rien que quand il fait quelque chose !
Ceci dit, à certains moments le programme se fige, et c'est en tentant de
comprendre pourquoi que j'ai détecté la chose...un utilisateur s'est étonné
de ce que le programme se bloquait ...
Le plus surprenant, c'est qu'après un certain temps, le programme se
débloque et continue comme si de rien n'était ...
Le phénomène est reproductible sur différente machine ...
J'ai pensé à un deadlock... mis je n'ai rien trouvé après plusieurs lectures
attentives de mon code et de nombreux déboguages pas à pas ...
Quelqu'un aurait-il une idée géniale pour m'aider à détecter où pourrait se
trouver rmon problème ?

Merci d'avance !


--
Marcel Berman
Membre de WindAsso (coté belge !)


---
Antivirus avast! : message Sortant sain.
Base de donnees virale (VPS) : 0629-0, 18/07/2006
Analyse le : 18/07/2006 23:47:39
avast! - copyright (c) 1988-2006 ALWIL Software.
http://www.avast.com

10 réponses

1 2
Avatar
nwjb
Le Tue, 18 Jul 2006 23:47:39 +0200, a écrit:

Salut !

Je suis devant un problème que je ne comprends pas.
Un programme en cours de développement, mais déjà en production, utilise
jusqu'à 95% des ressources processeur et ce,tant en mode Debug qu'en mode
Executable.
Et ce, alors qu'il est juste dans la fenêtre principale de l'application
(mère midi), en attendant que l'utilisateur fasse son choix.
A ce moment, il y a un timersys qui rafraichit toutes les secondes la
barre
de message (affichage de Num si Numlock est enfoncé) et un second
timersys
qui vérifie la valeur d'un record dans un fichier HF en mode CS toutes
les
30 secondes.
Si on ouvre une fenêtre (fille midi) de l'application, les performances
sont
correctes, on ne constate pas vraiment de ralentissement et, c'est que
je ne
comprends pas, l'usage du processeur diminue !
Dès que le programme attend un imput, la consommation en ressources
processeur remonte !
Bref, j'ai un programme qui utilise plus le processeurs quand il ne fait
rien que quand il fait quelque chose !
Ceci dit, à certains moments le programme se fige, et c'est en tentant de
comprendre pourquoi que j'ai détecté la chose...un utilisateur s'est
étonné
de ce que le programme se bloquait ...
Le plus surprenant, c'est qu'après un certain temps, le programme se
débloque et continue comme si de rien n'était ...
Le phénomène est reproductible sur différente machine ...
J'ai pensé à un deadlock... mis je n'ai rien trouvé après plusieurs
lectures
attentives de mon code et de nombreux déboguages pas à pas ...
Quelqu'un aurait-il une idée géniale pour m'aider à détecter où pourrait
se
trouver rmon problème ?

Merci d'avance !




Merci d'utiliser du français lorsque c'est possible.

Code d'initialisation des champs , notamment ceux basés sur une requête,
ils sont lancés dans
des threads asynchrones et libèrent le processeur lorsque terminés.?



--
J.Bratières

Enlever paspub pour répondre
Please remove paspub when answering
Avatar
Romain PETIT
Le 19/07/2006, nwjb a supposé :

Merci d'utiliser du français lorsque c'est possible.



[...] ils sont lancés dans
des threads asynchrones



Ahem, un thread ?
Un processus veux-tu dire ?

--
Romain PETIT
http://cerbermail.com/?O16kfXOFcq
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
jacques trepp
nwjb a écrit :




Merci d'utiliser du français lorsque c'est possible.



(???)
tymersys est une commande windev.
on peut traduire deadlock par blocage mortel, et numlock par majuscule
bloquée.
ça n'ajoute pas grand chose à la compréhension du message, au contraire.
A part ça, qu'est-ce qui n'est pas français ?


--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com
Avatar
Niko
En général, il faut mettre un sleep ou quelque chose comme ça pour endormir
un processus( thread) pour éviter qu'il ne s'embale






"jacques trepp" a écrit dans le message de
news:44bdde77$0$21619$
nwjb a écrit :

>>
> Merci d'utiliser du français lorsque c'est possible.

(???)
tymersys est une commande windev.
on peut traduire deadlock par blocage mortel, et numlock par majuscule
bloquée.
ça n'ajoute pas grand chose à la compréhension du message, au contraire.
A part ça, qu'est-ce qui n'est pas français ?


--
Jacques Trepp
Albygest - 81160 - St Juery
jacques-pas de
(enlever '-pas de spam' pour me joindre)
http://www.albygest.com


Avatar
Niko
essaie ça :
AppelDLL32("kernel32", "Sleep" , dwMilliseconds)
et tu met 10 à la place de dwMilliseconds


"Niko" a écrit dans le message de
news:44bdf02a$0$691$
En général, il faut mettre un sleep ou quelque chose comme ça pour


endormir
un processus( thread) pour éviter qu'il ne s'embale






"jacques trepp" a écrit dans le message de
news:44bdde77$0$21619$
> nwjb a écrit :
>
> >>
> > Merci d'utiliser du français lorsque c'est possible.
>
> (???)
> tymersys est une commande windev.
> on peut traduire deadlock par blocage mortel, et numlock par majuscule
> bloquée.
> ça n'ajoute pas grand chose à la compréhension du message, au contraire.
> A part ça, qu'est-ce qui n'est pas français ?
>
>
> --
> Jacques Trepp
> Albygest - 81160 - St Juery
> jacques-pas de
> (enlever '-pas de spam' pour me joindre)
> http://www.albygest.com




Avatar
marcel
On 19-Jul-2006, "Niko" wrote:

essaie ça :
AppelDLL32("kernel32", "Sleep" , dwMilliseconds)
et tu met 10 à la place de dwMilliseconds





Merci à tous pour vous pencher sur mon problème ...
Désolé pour l'utilisation de mots anglais mais quand même unthread pour un
processus lancé par la commande threadexecute() ne me semble pas si hors de
propos ...
Et, par ailleurs, sur mon clavier belge la touche "Blocage numérique"
s'appelle "NumLock" ...
Mais bon ...

En particulier pour Niko :
Ou dois-je mettre le bout de code que tu me proposes ? Dans le code de la
procédure exécutée par le processus/thread ?
N'est-ce pas équivalent à un multitâche(1) ?
Parce que j'ai des multitâche(1) un peu partout dans mon code ...

Merci en tout cas pouR la suggestion !

--
Marcel Berman
Membre de WindAsso (coté belge !)


---
Antivirus avast! : message Sortant sain.
Base de donnees virale (VPS) : 0629-0, 18/07/2006
Analyse le : 19/07/2006 11:05:04
avast! - copyright (c) 1988-2006 ALWIL Software.
http://www.avast.com
Avatar
Emmanuel Haefele
a écrit dans le message de
news:

Bonjour Marcel,

Parce que j'ai des multitâche(1) un peu partout dans mon code ...



Ne serait-ce pas ça la cause de ton problème. Le multitache est interdit
dans les thread, cf la doc ;-)


Amicalement,

Emmanuel Haefelé.
Avatar
Emmanuel Haefele
"Emmanuel Haefele" a écrit dans le message de
news:44bdf809$0$852

Ne serait-ce pas ça la cause de ton problème. Le multitache est interdit
dans les thread, cf la doc ;-)



Idem pour le timersys d'ailleurs car je crois que c'est plutôt cette
fonction que tu utilises.


Amicalement,

Emmanuel Haefelé.
Avatar
Niko
Pour ma part je sais pas si Multitache( ) est interdit dans un thread. (par
définition son utilisation semble logique dans un thread). Mais bon. De
toute évidence l'utilisation intenpestive n'est pas bon... Voici ce qu'il
peut se passer si il y en a trop :
prenons le cas de plusieurs thread qui tournent en même temps (un timer, un
pour le verNum, enfin tu vois où je veux en venir)
Et bien un thread s'exécute en parallèle donc lorsqu'ils ont terminé c'est
pas nécessairement en même temps, donc si tu lui dit de s'endormir 1ms et
aux autres aussi il se peut qu'il soit tous bloqué 1ms soit à la suite (au
quel cas tu comptes la somme de tes ms et ça peut durer longtemps...) soit
en mm tmps (mais ce qui n'est pas physiquement possible car du véritable
multitache n'existe pas (encore moins en Windev!)

Donc, même si tu n'as pas tout compris à mon explication, mes
recommandations sont d'enlever les mutlitaches(1) qui n'ont pas lieu d'être.
Quant a ce que je t'ai dit à propos de AppelDLL32("kernel32", "Sleep" ,
dwMilliseconds), je l'a mettrai au début des boucles. Mais le résultat,
normalement, doit être le même.... A utiliser avec précaution!


"Emmanuel Haefele" a écrit dans le message de
news:44bdf903$0$1015$
"Emmanuel Haefele" a écrit dans le message de
news:44bdf809$0$852

> Ne serait-ce pas ça la cause de ton problème. Le multitache est interdit
> dans les thread, cf la doc ;-)

Idem pour le timersys d'ailleurs car je crois que c'est plutôt cette
fonction que tu utilises.


Amicalement,

Emmanuel Haefelé.



Avatar
Niko
il est dit dans l'aide : "Les événements et timer lancés avant l'exécution
de la fonction Multitâche sont gérés lors de la temporisation. "
Ne serait-ce pas tout le contraire que tu fais????




"Niko" a écrit dans le message de
news:44be005e$0$666$
Pour ma part je sais pas si Multitache( ) est interdit dans un thread.


(par
définition son utilisation semble logique dans un thread). Mais bon. De
toute évidence l'utilisation intenpestive n'est pas bon... Voici ce qu'il
peut se passer si il y en a trop :
prenons le cas de plusieurs thread qui tournent en même temps (un timer,


un
pour le verNum, enfin tu vois où je veux en venir)
Et bien un thread s'exécute en parallèle donc lorsqu'ils ont terminé c'est
pas nécessairement en même temps, donc si tu lui dit de s'endormir 1ms et
aux autres aussi il se peut qu'il soit tous bloqué 1ms soit à la suite (au
quel cas tu comptes la somme de tes ms et ça peut durer longtemps...) soit
en mm tmps (mais ce qui n'est pas physiquement possible car du véritable
multitache n'existe pas (encore moins en Windev!)

Donc, même si tu n'as pas tout compris à mon explication, mes
recommandations sont d'enlever les mutlitaches(1) qui n'ont pas lieu


d'être.
Quant a ce que je t'ai dit à propos de AppelDLL32("kernel32", "Sleep" ,
dwMilliseconds), je l'a mettrai au début des boucles. Mais le résultat,
normalement, doit être le même.... A utiliser avec précaution!


"Emmanuel Haefele" a écrit dans le message de
news:44bdf903$0$1015$
> "Emmanuel Haefele" a écrit dans le message de
> news:44bdf809$0$852
>
> > Ne serait-ce pas ça la cause de ton problème. Le multitache est


interdit
> > dans les thread, cf la doc ;-)
>
> Idem pour le timersys d'ailleurs car je crois que c'est plutôt cette
> fonction que tu utilises.
>
>
> Amicalement,
>
> Emmanuel Haefelé.
>




1 2