Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1575 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  thread MFC, communication

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

thread MFC, communication

n°1086457
joeleclems
Posté le 17-05-2005 à 12:06:57  profilanswer
 

Bonjour,
Je travaille sous visual et j'aimerai savoir :  
Est ce qu'une la fonction qui est appelé par un thread avec "AfxBeginThread(fonction, fenetre)" peut récuperer l'ID du thread qui l'execute?

mood
Publicité
Posté le 17-05-2005 à 12:06:57  profilanswer
 

n°1086710
Rits75
to?be:!be
Posté le 17-05-2005 à 14:46:07  profilanswer
 

je c'est pas si tu as regardé la msdn...si oui en ouvrant les yeux ca devrait  aller beaucoup mieux alors!!
genre regarder le retour AfxBeginThread!!
 
...maintenant faut voir aussi ce que tu entends par ID?


Message édité par Rits75 le 17-05-2005 à 14:48:01
n°1087863
joeleclems
Posté le 18-05-2005 à 14:30:10  profilanswer
 

j'ai reglé ce problème... mais j'en ai un autre! depuis que je lance plusieurs threads, je n'ai plus d'actualisation d'affichage!
tout d'abord, je commence par lancer les threads :  

Code :
  1. //Lancement des threads
  2. for(int i=0; i<nb_thread; i++)
  3. {
  4. if(nb_image > 0 )
  5. {
  6.  ThreadParam thread_param;
  7.  //On met à jour l'image à traiter
  8.  imageFile = FindFile::combinePath(find.filelist[0].path, string(sortNamesCSTRING[i]));
  9.  _avnct_bas->SetWindowText(imageFile.c_str());
  10.  thread_param._has_finish = false;
  11.  thread_param._image_file = imageFile;
  12.  thread_param._sensibilite = sensibilite;
  13.  _data.push_back(thread_param);
  14.  _threads.push_back(AfxBeginThread(processOneImage, this));
  15.  _corres.push_back(_threads[i]->m_nThreadID);
  16.  nb_image--;
  17. }
  18. }


et
voila la partie qui pose problème je pense :  

Code :
  1. while(nb_image>0)
  2. {
  3. for (int i=0; i<nb_thread; i++)
  4. {
  5.  //Si le thread a terminé de traiter son image
  6.  if(_data[i]._has_finish)
  7.  {
  8.   //On décremente le nombre d'images restantes
  9.   p_staying_files--;
  10.   sprintf(staying_files,"%d",p_nb_total_of_files - p_staying_files);
  11.   _processed_img.SetWindowText(staying_files);
  12.   _progress_bar_gnl->SetPos( (p_nb_total_of_files - p_staying_files) * 100 / p_nb_total_of_files );
  13.   _progress_bar->SetPos( (p_nb_total_of_files - nb_image +1) * 100 / nb_image );
  14.   //On enregistre le resultat dans le rapport
  15.   _data[i]._bad_image._folders = dossier_source;
  16.   _report._vreport.push_back(_data[i]._bad_image);
  17.   _report.saveLigne();
  18.   //On met à jour l'image à traiter
  19.   imageFile = FindFile::combinePath(find.filelist[0].path, string(sortNamesCSTRING[p_nb_total_of_files - nb_image]));
  20.   _data[i]._image_file = imageFile;
  21.   _data[i]._sensibilite = sensibilite;
  22.   //On reveille le thread
  23.   ResumeThread(_threads[i]->m_hThread);
  24.   nb_image--;
  25.   _data[i]._has_finish = false;
  26.  }
  27. }
  28. }

n°1090248
Rits75
to?be:!be
Posté le 20-05-2005 à 08:58:22  profilanswer
 

peut etre parce que ton thread consomme entierement les ressources cpu.
met un sleep(1) dans ton thread pour voir si ca vient de la, si c'est le ca essai d'ameliorer en gerant la priorité.

n°1090311
HelloWorld
Salut tout le monde!
Posté le 20-05-2005 à 10:02:58  profilanswer
 

Code :
  1. //Si le thread a terminé de traiter son image  
  2.         if(_data[i]._has_finish)


attente active, c'est mal. Regarde du côté des event et de WaitForMultipleObjects. Ou mieux dans ton cas, génère un message perso depuis tes threads que tu vas intercepter comme un message normal depuis ton code MFC afin de mettre à jour l'interface.
Ta boucle est dans ton thread principal je suppose, c'est elle qui bloque ton code d'interface. Il faut quitter la fonction où tu te trouve pour rendre la main aux MFC afin qu'elles gèrent l'interface.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1090679
joeleclems
Posté le 20-05-2005 à 14:11:47  profilanswer
 

merci pour vos réponses, mais depuis que j'utilise "WaitForMultipleObjects", le programme se bloque au second passage dans la boucle (j'utilise bien le setEvent et ResetEvent). Le plus "rigolo" c'est que quand je met des points d'arrêt en mode debug, ça fonctionne... quand je les enleve ça ne marche plus : le prog se bloque!

n°1090846
HelloWorld
Salut tout le monde!
Posté le 20-05-2005 à 15:31:26  profilanswer
 

Ben oui il faut rendre la main aux MFC de temps en temps pour qu'elles gèrent les messages. C'est pour ça que je te disais d'utiliser des messages. Sinon ben tu peux utiliser MsgWaitForMultipleObjects pour détecter que y'a des messages à traiter.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1090890
joeleclems
Posté le 20-05-2005 à 15:55:26  profilanswer
 

ce qui bloquait c'était le "WaitForSingleObject(_threads[i]->m_hThread, 100);" : le problème c'est que mon prog principal doit attendre la fin des thread, mais doit aussi réagir aux messages que les threads lui envoient! et même si un thread envoie un message par PostMessage, alors le prog principal se bloque et attend : il ne rentre pas dans la fonction associé au message! comment faire?

n°1091271
HelloWorld
Salut tout le monde!
Posté le 20-05-2005 à 21:37:34  profilanswer
 

Relis mon dernier post...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1093041
joeleclems
Posté le 23-05-2005 à 10:05:50  profilanswer
 

il faut utiliser "MsgWaitForMultipleObjects" à la place de "WaitForMultipleObjects" ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  thread MFC, communication

 

Sujets relatifs
[MFC] Cacher une fenetreCommunication entre GUI et parser
[MFC] intercepter le code d'un bouton[QT]Probleme de thread...
Win32 - parcourir la pile utilisateur d'un threadFichier->Nouveau [MFC]
[MFC] imprimer contenue d'une fenetre "Vue"Config vitesse de communication série sous LINUX
thread : probleme avec startCommunication avec thread
Plus de sujets relatifs à : thread MFC, communication


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR