begin process at 2012 05 30 13:43:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

Thread et actualisation de l'affichage


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Thread et actualisation de l'affichage

mardi 15 novembre 2005 à 18:54:02 | Thread et actualisation de l'affichage

jul39dole

Bonjour,
voici mon problème : (sous C++, programmation API windows)

- Je créé un boite de dialogue avec DialogBox, jusque là tout va bien.
- Un bouton permet de lancer un calcul :

case WM_COMMAND :
   switch(LOWORD(wParam))
   {
      case IDC_CALCULER:
         On appelle une fonction qui lance le thread de calcul
         Pendant ce temps l'exécution continue ici :

         while(p.JeCalcule)
         {
            Sleep(100);
            Et affichage de la progression.
         }
   ...

- Cependant, cela bloque les messages de gestion de l'affichage (les WM_PAINT je suppose), et la fenêtre se fige.

Auriez-vous une solution à me proposer ?

D'avance merci.

mardi 15 novembre 2005 à 19:16:20 | Re : Thread et actualisation de l'affichage

BruNews

Administrateur CodeS-SourceS
Sleep en boucle, normal que ça bloque, non ?

Si c'est la progression de ce que fait le thread, mets l'affichage de cette progression DANS le thread.

ciao...
[ Lien ]
BruNews, MVP VC++
mardi 15 novembre 2005 à 20:25:33 | Re : Thread et actualisation de l'affichage

jul39dole

Après test, avec ou sans le Sleep, cela ne change rien.

Il faut en effet que l'affichage de la progression se fasse dans le thread.
Comment dois-je faire ? Exporter mes handles de la thread? et envoyer des messages PAINT pour redessiner la fenêtre ?
mardi 15 novembre 2005 à 20:55:57 | Re : Thread et actualisation de l'affichage

BruNews

Administrateur CodeS-SourceS
Clair que ce n'est pas Sleep par lui même qui bloque mais bien sur la boucle.

Donne hwnd de progressBar ou autre au thread, soit par une var globale soit en param du thread.
Par un pointeur de struct, on peut passer 1000 params au thread si on veut. Attention toutes fois qu'en cas de struct, elle ne doit pas être sur pile et disparaitre illico après appel de CreateThread sinon badaboum. Fais un VirtualAlloc au besoin, caste en une struct et passe au thread, thread fera un VirtualFree sur son param en sortie et tout ira bon.

ciao...
[ Lien ]
BruNews, MVP VC++
mardi 15 novembre 2005 à 22:13:01 | Re : Thread et actualisation de l'affichage

jul39dole

heu je passe déjà un pointeur sur une classe à mon thread, donc je vais inclus les hwnd dans ma classe.
Pourquoi un VirtualAlloc plutot qu'un simple new ?
mardi 15 novembre 2005 à 22:31:04 | Re : Thread et actualisation de l'affichage

jul39dole

mais en fait le pb c'est qu'il faut séparer le programme en deux parties :
- une partie interface graphique
- une partie noyau
en donc en s'occupant de l'interface dans le kernel, la séparation n'est plus aussi nette...
mardi 15 novembre 2005 à 22:46:40 | Re : Thread et actualisation de l'affichage

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
pourquoi VirtualAlloc: parce que c'est écrit API dans la question, rien de plus.

#define MSGAVANCE (WM_USER + 100)

dans thread tu fais des PostMessage(hwndcible, MSGAVANCE, 0, 0);
que tu traites dans la fenetre pour dessiner avancement, ainsi tu gardes la séparation.

ciao...
[ Lien ]
BruNews, MVP VC++
mardi 15 novembre 2005 à 22:48:08 | Re : Thread et actualisation de l'affichage

jul39dole

ok merci bien !


Cette discussion est classée dans : case, affichage, actualisation, thread, calcul


Répondre à ce message

Sujets en rapport avec ce message

implicit declaration of function `int getchar(...)' [ par cognac ] À chaque fois que j'utilise getch(); j'obtien le message suivant:getch();Voici mon programme (en fait mon exercice):#include //bibliotheque d'entree getch [ par portoroz ] g poser un message je n'arrive pas a le rretrouver.je suis sous environnement dos, avec DEV C++ telecharger sur internet en version us.comprend pas po Affichage CDialog dans un autre thread [ par sanouk ] Bonjour,Je veux afficher une boite de dialogue dans un thread secondaire. J'utilise pour cela CWinThread qui créé ma boite de dialogue.Dans ma classe Affichage dans MFC [ par guillotonl ] Je désire afficher des résultats dans une fenètre de calcul.Le problème, c'est que je ne connais pas le nombre de résultats a afficher avant de faire erreur a l'execution [ par vangeurmasker ] J'ai créé un projet sous VC++ 6 pour faire une calcullette qui annalyse une chaine entrée. Lors de la compilation je n'ai aucune erreur. C'est a l'exe pb d'affichage ProgessBar à partir d'un Thread [ par bejeau_js ] Bonjour à tous,Je travaille actuellement sur une application qui génère un fichier résultat sous form d'un taleau Excel...lorsque j'ai un grand nombre Threads, Synchronize, [ par Narcissus ] Bonjour à tous ça va être ma première manifestation sur Code-Sources... lol</ pb d'actualisation d'affichage. [ par gege1024 ] j'ai un programme qui fais bcp de choses (lol)pour pimenter le tout j'ai fais un menu pour personnaliser l'interface (couleur du fond, couleur des con Affichage trop rapide [ par malik7934 ] Hello,Je reviens à la charge avec une question que j'ai déjà posé mais pour laquelle j'ai pas eu de réponse qui me permette de progresser...Mon prog f affichage CDialog dans plusieurs thread [ par manyyy67 ] Bonjour, je suis débutant en mfc voila j'ai un problème j'ai une boite de Dialog CInformationDlg qui est crée dans un thread d'un gros programme profe


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales