Bonjour,
je suis dans une boucle while qui attend une condition. Le problème est que
mon application monopolise 100% du cpu, et ne réagit plus aux controles
utilisateurs.
En VB6, je mettais un doevents et c'était bon. en C#, j'ai essayé de mettre
Application.doEvents(), mais ca n'améliore pas l'occupation CPU...
Quelle est la meilleure solution ? Faut-il utiliser Thread.sleep ? Dans ce
cas, quelle valeur donner à l'intervalle de temps?
Merci d'avance
Cordialement,
Philippe
--
Pour me répondre : philippe (POINT) maire (@) evc (POINT) net
Vive le spam :-)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
David Alloza
Il faut toujours privilégier l'utilisation d'evenements aux attentes de conditions. N'y a t'il pas un event qui correspondre a l'entrée que tu attend ? Si tu ne peut vraiment pas faire autrement, pour le Sleep, la durée est en millisecondes. Il faut savoir que le Sleep va mettre en pause ton programme pour executer les threads de priorité egale ou inférieure ( les threads de de priorité supérieures peuvent couper l'execution de ton thread de leur propre initiative). Comme valeur pour ton Sleep, je te conseille de mettre la latence maximale que tu tolère sur la réponse a ton evenement. Si, par exemple, tu veut que ton application réponde au 1/50e de seconde à ce que tu attend, met un une valeur de 20 pour ton Sleep. Cordialement, David.
Philou wrote:
Bonjour, je suis dans une boucle while qui attend une condition. Le problème est que mon application monopolise 100% du cpu, et ne réagit plus aux controles utilisateurs. En VB6, je mettais un doevents et c'était bon. en C#, j'ai essayé de mettre Application.doEvents(), mais ca n'améliore pas l'occupation CPU...
Quelle est la meilleure solution ? Faut-il utiliser Thread.sleep ? Dans ce cas, quelle valeur donner à l'intervalle de temps?
Merci d'avance Cordialement, Philippe
Il faut toujours privilégier l'utilisation d'evenements aux attentes de
conditions. N'y a t'il pas un event qui correspondre a l'entrée que tu
attend ?
Si tu ne peut vraiment pas faire autrement, pour le Sleep, la durée est
en millisecondes. Il faut savoir que le Sleep va mettre en pause ton
programme pour executer les threads de priorité egale ou inférieure (
les threads de de priorité supérieures peuvent couper l'execution de ton
thread de leur propre initiative).
Comme valeur pour ton Sleep, je te conseille de mettre la latence
maximale que tu tolère sur la réponse a ton evenement.
Si, par exemple, tu veut que ton application réponde au 1/50e de seconde
à ce que tu attend, met un une valeur de 20 pour ton Sleep.
Cordialement,
David.
Philou wrote:
Bonjour,
je suis dans une boucle while qui attend une condition. Le problème est que
mon application monopolise 100% du cpu, et ne réagit plus aux controles
utilisateurs.
En VB6, je mettais un doevents et c'était bon. en C#, j'ai essayé de mettre
Application.doEvents(), mais ca n'améliore pas l'occupation CPU...
Quelle est la meilleure solution ? Faut-il utiliser Thread.sleep ? Dans ce
cas, quelle valeur donner à l'intervalle de temps?
Il faut toujours privilégier l'utilisation d'evenements aux attentes de conditions. N'y a t'il pas un event qui correspondre a l'entrée que tu attend ? Si tu ne peut vraiment pas faire autrement, pour le Sleep, la durée est en millisecondes. Il faut savoir que le Sleep va mettre en pause ton programme pour executer les threads de priorité egale ou inférieure ( les threads de de priorité supérieures peuvent couper l'execution de ton thread de leur propre initiative). Comme valeur pour ton Sleep, je te conseille de mettre la latence maximale que tu tolère sur la réponse a ton evenement. Si, par exemple, tu veut que ton application réponde au 1/50e de seconde à ce que tu attend, met un une valeur de 20 pour ton Sleep. Cordialement, David.
Philou wrote:
Bonjour, je suis dans une boucle while qui attend une condition. Le problème est que mon application monopolise 100% du cpu, et ne réagit plus aux controles utilisateurs. En VB6, je mettais un doevents et c'était bon. en C#, j'ai essayé de mettre Application.doEvents(), mais ca n'améliore pas l'occupation CPU...
Quelle est la meilleure solution ? Faut-il utiliser Thread.sleep ? Dans ce cas, quelle valeur donner à l'intervalle de temps?
Merci d'avance Cordialement, Philippe
christophe morzadec
il serait plus judicieux d'utiliser les threads pour ton application. Fini les blocages...
Dimitri
il serait plus judicieux d'utiliser les threads pour ton application. Fini
les blocages...