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 :
- //Lancement des threads
- for(int i=0; i<nb_thread; i++)
- {
- if(nb_image > 0 )
- {
- ThreadParam thread_param;
- //On met à jour l'image à traiter
- imageFile = FindFile::combinePath(find.filelist[0].path, string(sortNamesCSTRING[i]));
- _avnct_bas->SetWindowText(imageFile.c_str());
- thread_param._has_finish = false;
- thread_param._image_file = imageFile;
- thread_param._sensibilite = sensibilite;
- _data.push_back(thread_param);
- _threads.push_back(AfxBeginThread(processOneImage, this));
- _corres.push_back(_threads[i]->m_nThreadID);
- nb_image--;
- }
- }
|
et
voila la partie qui pose problème je pense :
Code :
- while(nb_image>0)
- {
- for (int i=0; i<nb_thread; i++)
- {
- //Si le thread a terminé de traiter son image
- if(_data[i]._has_finish)
- {
- //On décremente le nombre d'images restantes
- p_staying_files--;
- sprintf(staying_files,"%d",p_nb_total_of_files - p_staying_files);
- _processed_img.SetWindowText(staying_files);
- _progress_bar_gnl->SetPos( (p_nb_total_of_files - p_staying_files) * 100 / p_nb_total_of_files );
- _progress_bar->SetPos( (p_nb_total_of_files - nb_image +1) * 100 / nb_image );
- //On enregistre le resultat dans le rapport
- _data[i]._bad_image._folders = dossier_source;
- _report._vreport.push_back(_data[i]._bad_image);
- _report.saveLigne();
- //On met à jour l'image à traiter
- imageFile = FindFile::combinePath(find.filelist[0].path, string(sortNamesCSTRING[p_nb_total_of_files - nb_image]));
- _data[i]._image_file = imageFile;
- _data[i]._sensibilite = sensibilite;
- //On reveille le thread
- ResumeThread(_threads[i]->m_hThread);
- nb_image--;
- _data[i]._has_finish = false;
- }
- }
- }
|