Le programme fonctionne mais la mention (ne réponds pas) apparait dans la fenetr [Résolu]

cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 1 sept. 2008 à 09:55 - Dernière réponse : cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention
- 2 sept. 2008 à 11:31
Bonjour a tous, comme certains le savent, je dévelloppe un petit programme (ToolsCleaner) en delphi, dont le but est de rechercher la présence de certains fichiers et dossiers sur le disque dur, puis de les supprimmer.
J'ai rencontré divers soucis a propos de la recherche, et je remercie ceux qui m'ont aider a les surmonter.
Je me suis depuis, perfectionné en delphi, mais je suis a nouveau confronté a un léger soucis.

En effet, lorsque je lance le programme (compatible XP et Vista) sur certains PC , et pas sur tous !!  la mention (ne réponds pas) s'inscrit dans le titre de la fenêtre, comme sur cette image http://www.gitch.ch/msn.jpg . je sais que mon programme est gourmand en ressources,  peut etre un problème de buffer overflow ?? Mais ce qui est érange, c'est que malgré l'apparition de cette inscription, le programme continue de s'executer normalement.

Pouvez vous m'aider a résoudre ce problème, à savoir faire en sorte que (ne réponds pas) n'apparaisse plus.
 Merci d'avance .Cordialemet Zatox

http://pc-system.fr
Afficher la suite 

Votre réponse

10 réponses

cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 1 sept. 2008 à 19:41
+3
Utile
"mon application recherche la présence de plusieurs fichiers (une centaine) sur la partition système du PC."


Bon bin là, typiquement, tu es en présence d'un traitement long, qu'il faut traiter sur un thread secondaire.

On peut voir un thread un peu comme le fil de la pensée : tu ne peux pas faire des calculs et dessiner en même temps. Par contre, tu peux dessiner une seconde, calculer une seconde, dessiner une seconde... Tu donneras l'impression de dessiner et calculer en même temps.

C'est le principe de ProcessMessages : tu abandonnes le calcul pour dessiner. Mais pour que ce soit efficace, il faut appeler ProcessMessages très souvent durant le calcul. Cela dépend de l'algo, mais cela peut être fastidieux à mettre en place. Et on ne fait que simuler le fait que l'on fait deux choses en même temps.

Par contre si tu invites un pote, il pourra calculer pendant que tu dessines. De cette manière, les deux actions seront effectivement simultanées.

Créer un thread dans une application revient à inviter un pote. Tu as déjà le thread principal de l'application qui est crée quoique tu fasses, mais tu peux aussi en créer autant que tu veux.

Tout ce que tu as à faire dans ton programme, c'est de créer un nouveau thread et de lui demander de réaliser le calcul. Pendant ce temps là, ton thread principal déssinera sans que tu ais à t'en préocupper.

Ce n'est cependant pas aussi simple que cela : il est souvent utile de synchroniser le dessin avec les calculs, par exemple pour dessiner le résultat (Afficher les fichiers trouvés).

Et ce que je n'ai pas dit, c'est que tu peux inviter des threads, mais pas des processeurs. Donc l'exécution de deux threads n'est bien souvent pas aussi simultanée que l'on pourrait l'espérer.

De nombreux tutoriaux et exemples sur les threads et Delphi traînent sur le net. Par exemple dans ce source, j'utilise des threads, bien que ce ne soit pas le sujet principal.

Les threads ne font pas partie des trucs que l'on apprend en premier, mais il est indispensable de les comprendre à un moment ou à un autre.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_rt15
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 2 sept. 2008 à 11:19
+3
Utile
Voilà celui qui me semble le plus pédagogique :

http://www.delphifr.com/tutoriaux/DELPHI-THREADS_231.aspx

cantador
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_cantador
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 1 sept. 2008 à 12:05
0
Utile
Bonjour,

à savoir faire en sorte que (ne réponds pas) n'apparaisse plus.
Si l'erreur est sans conséquence(?), tu peux cacher le message en supprimant la barre de titre de la forme

cantador
Commenter la réponse de cs_cantador
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 1 sept. 2008 à 13:34
0
Utile
Salut,

Windows affiche ce message lorsque l'application... ne répond pas.

Mais ne répond pas à quoi ?

Au messages envoyés par Windows et à destination de l'application.

Ces messages informe l'application de l'état du système d'exploitation, de la fenêtre de l'application, des actions de l'utilisateur...

Par exemple, quand on bouge la souris au dessus de l'appli, Windows envoie des WM_MOUSEMOVE. Dans une appli Delphi, ces messages sont traités et un éventuel gestionnaire d'évènement est appelé si le développeur l'a demandé (OnMouseMove...)

Une application en cours de fonctionnement n'est pas en permanence en train d'attendre les messages : elle peut par exemple être en train de traiter l'un d'eux (Calcul, sauvegarde dans un fichier...)

Dans ce cas les messages restent dans une file d'attente.
Dans le cas d'une application qui réalise un traitement long, la file d'attente grossis et ne se vide plus. Windows le signal alors en ajoutant ce message. De cette manière, l'utilisateur est informé que l'application n'est pas en état de réagir à des cliques, à des touches tapées, à des déplacement de souris...

Si ton application réalise des traitements longs, tu peux passer utiliser un thread pour réaliser le traitement, pendant que le thread principal s'occupera de traiter les messages. Autre solution, utiliser Application.ProcessMessages dans ton traitement long, aussi souvent que possible (Dans une boucle). Mais attention à ce que l'utilisateur ne puisse pas faire d'ânnerie (Cliquer deux fois sur un bouton de lancement de calcul...)

Si ton application ne fait rien qui soit suceptible de prendre du temps, c'est curieux...
Commenter la réponse de cs_rt15
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 1 sept. 2008 à 19:08
0
Utile
bonsoir, et un grand merci pour vos réponses. Cantador, ta méthode de faire en sorte que le message n'apparaisse plus dans le titre me plait, mais comment la mettre en oeuvre ?

ensuite, pour rt15, mon application recherche la présence de plusieurs fichiers (une centaine) sur la partition système du PC. ces fichiers sont définis dans 3 TStringList.

mais je ne comprends pas le langage technique que tu emploie. c'est juste une ligne de code que je doit rajouter a ma source? ou alors je dois revoir tout le code source? merci d'avance

http://pc-system.fr
Commenter la réponse de cs_zatox
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 2 sept. 2008 à 09:18
0
Utile
Pour supprimer la barre de titre tout en ayant une forme déplaçable voir le traitement de forme "alerte" dans le prog "PostitForEver";


Mais pour ton traitement, il serait préférable de faire un Thread.

cantador
Commenter la réponse de cs_cantador
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 2 sept. 2008 à 10:45
0
Utile
Bonjour a tous les deux et merci pour vos réponses.
Cantador, je viens de mieux comprendre ce que tu me propose, mais je ne veux nullement supprimmer la barre de titre. j'avais mal compris a ma première lecture? en revanche, vous me proposez tous les deux de faire un THREAD ma question est simple : c'est quoi un thread? et comment le mettre en place?

merci pour vos réponses et du temps que vous me consacrez .

http://pc-system.fr
Commenter la réponse de cs_zatox
cs_cantador 4996 Messages postés dimanche 26 février 2006Date d'inscription 27 mars 2018 Dernière intervention - 2 sept. 2008 à 10:54
0
Utile
@zatox :


rt15 a presque tout donné à propos des Thread et les exemples sont sur ce site ou d'autres peut-être..
A toi de jouer maintenant..
Mais si tu as une difficulté particulière dans un code traitant des threads alors tu pourras reposer une autre question avec le code à l'appui.

bon courage.

cantador
Commenter la réponse de cs_cantador
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 2 sept. 2008 à 10:56
0
Utile
Merci, j'ai bien compris que je devais faire en sorte que mon programme fasse une chose a la fois tout en faisant croire a l'utilisateur qu'il fait tout en même temps. Ce que je voulais dire, c'est comment traduire cela en ligne de codes? aurais tu un petit tuto sous la main a me proposer? merci d'avance

http://pc-system.fr
Commenter la réponse de cs_zatox
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 2 sept. 2008 à 11:31
0
Utile
merci beaucoup, je vais me encher là dessus

http://pc-system.fr
Commenter la réponse de cs_zatox

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.