Garder la main durant un calcul lourd - C++ - Programmation
Marsh Posté le 20-05-2003 à 12:01:58
Je me souviens que ce sujet a deja ete aborde. Fais une petite recherche.
Marsh Posté le 20-05-2003 à 12:22:51
T'aurais pas par hasard une boucle genre while not threadFini ?
Marsh Posté le 20-05-2003 à 12:37:23
Darsh a écrit : J'ai fait un thread pour le calcul en le mettant en priorité basse mais ca ne change rien. |
C'est bien beau de faire un thread, mais le mets tu en pause une fois ton itération terminée ?
Genre :
Code :
|
Marsh Posté le 20-05-2003 à 12:40:37
Ouais enfin c'est peut-être plus propre c'est de ne pas faire de boucle, et d'utiliser l'événement OnTreadEnd (ou un truc du genre) du TThread
Sinon un petit Application.HandleMessage dans la boucle qui attend la fin du thread, plutôt que d'endormir le thread, non ?
Marsh Posté le 20-05-2003 à 12:43:21
chelou ton histoire a mon avis t'as du merder qqpart
Donc tu fais une thread annexe qui se charge du calcul, et normalement ta thread principale continue a s'occuper de la boucle de messages
le plus simple pour savoir si la thread a fini son boulot et que cette derniere envoie un message a la principale. (via un SendMessage tout con)
Marsh Posté le 20-05-2003 à 12:46:09
Ouais enfin vu qu'il est en C++Builder je suppose qu'il utilise la classe TThread qui encapsule le tout, donc c'est pas un message qu'il doit intercepter
Marsh Posté le 20-05-2003 à 12:47:47
antp a écrit : Ouais enfin vu qu'il est en C++Builder je suppose qu'il utilise la classe TThread qui encapsule le tout, donc c'est pas un message qu'il doit intercepter |
ouais j'ai remarquer que je risquais d'etre a cote de la plaque apres avoir lu ta precedente reponse (J'avais zappe le fait qu'il etait en builder)
tiens, un truc qui me turlupine, chaque fois que qqun ici poste du code de builder les fonctions sont en __fastcall. c koi cette propagande ?
Marsh Posté le 20-05-2003 à 12:54:21
C'est C++Builder qui met ça devant toutes les fonctions qu'il crée tout seul
Citation : |
En fait faut pas oublier que C++Builder doit assurer la compatiblité avec Delphi : une bonne partie du code utilisé (composants visuels) et du code Delphi, or en Delphi par défaut il passe justement les params des fonctions/méthodes dans les registres si possible, j'imagine que c'est pour ça qu'ils ont mis ce __fastcall
Marsh Posté le 20-05-2003 à 13:04:25
ok, me demandais pkoi, du genre ils esperent gagner deux pouillemes de microseconde sur leur appli avec ca
Mais visiblement, c'est logique
thks
(N'empeche me demande comment il gere le renvoi de structure de plus de 8 bits, me semblait que EAX etait reservé pour ce genre de sport)
Marsh Posté le 20-05-2003 à 13:40:51
antp a écrit : Ouais enfin c'est peut-être plus propre c'est de ne pas faire de boucle, et d'utiliser l'événement OnTreadEnd (ou un truc du genre) du TThread |
encore un truc de modo ca
Marsh Posté le 23-05-2003 à 11:04:01
Moi, j'avais eu le même pb (avec le même tentative de résoudre mon pb avec un thread qui s'était soldée par un échec) en Delphi.
On m'avait dit d'utiliser une méthode de l'objet Application (ProcessMessage() ou un truc du genre) et ça marchait très bien Je sais pas si y'a l'équivalent sous C++ builder.
Marsh Posté le 23-05-2003 à 11:07:32
rufo a écrit : |
comme je l'ai dit, Application->HandleMessage(), ou Application->ProcessMessages()
Le premier prend moins de CPU mais convient plutôt aux boucles d'attente où on ne fait rien d'autre, le second est plutôt à placer des des boucles entre des opérations "lourdes"
Marsh Posté le 23-05-2003 à 11:13:15
antp a écrit : |
autant pour moi, j'avais raté un de tes messages...
Marsh Posté le 20-05-2003 à 11:48:20
Salut :-)
Je suis en train de faire un programme sous C++ Builder 4 avec une interface. Mon problème est que je lance un calcul long et lourd en cliquant sur un bouton et je voudrais pouvoir l'arrêter avant qu'il finisse en cas de besoin... Hors, je n'ai absolument pas la main... J'ai fait un thread pour le calcul en le mettant en priorité basse mais ca ne change rien. J'ai fait une fenêtre avec un bouton pour arrêter le calcul, mais je n'arrive pas à avoir la main pour cliquer dessus...
Quelqu'un aurait il une solution? Existe t il une option pour permettre de toujours garder la main?
Merci d'avance :-)