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

  FORUM HardWare.fr
  Programmation
  C++

  Probleme de thread qui bug quand on bouge la souris

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de thread qui bug quand on bouge la souris

n°1036870
TeigneuX
Posté le 06-04-2005 à 10:30:09  profilanswer
 

Bonjour,
Je programme actuellement sous borland C++ v6 et j'ai un gros bug de thread.
Je fait un visualisateur d'image qui créé des thumbnails pour chaque image pour que ca aille plus vite. Je fait l'affichage page par page. Donc dès qu'il a fini de créé la premiere page d'image je lance un thread qui va me créé tout les autres thumbnails sur le disque.Le thread se lance, et si je bouge pas la souris il arrive a me crée tout les thumbnails correctement. Mais si je bouge la souris au bout d'un moment le thread bug et il prend toujous la meme image pour les thumbnails ! Je ne comprend pas le rapport entre l'execution de mon thread et l'interference que cela peut avoir avec ma souris . HELP !!  
 
alors pour crée mon thread j'utilise la fonction :  
CreateThread(NULL,NULL,ThreadProc,NULL,NULL,&ThreadId);
 
puis je met mon code : (ListeFichiers étant une TStringList déclarer en global)
 

Code :
  1. DWORD WINAPI ThreadProc(LPVOID lpParam)
  2. {
  3.   AnsiString extension,NomFichier;
  4.   Form1->Label5->Caption="Création des fichiers Thumbnails en cours..." ;
  5.   TJPEGImage *jpg = new TJPEGImage();
  6.   Graphics::TBitmap * Bitmap = new Graphics::TBitmap;
  7.   float ratio_width;
  8.   float ratio_height;
  9.   for (int i=15; i<ListeFichiers->Count; i++)
  10. {
  11.     Form1->ImageCacher->Canvas->Brush->Color = clWhite;
  12.     Form1->ImageCacher->Canvas->FillRect(Form1->ImageCacher->Canvas->ClipRect);
  13.  extension=ExtractFileExt(ListeFichiers->Strings[i]);
  14.  NomFichier=ExtractFileName(ListeFichiers->Strings[i]);
  15.     Form1->Label6->Caption=NomFichier;
  16.  if (extension==".jpg"|| extension==".jpeg" || extension==".JPG"|| extension==".JPEG" )
  17.  {
  18.   jpg->LoadFromFile(ListeFichiers->Strings[i]);
  19.      
  20.   Bitmap->Assign(jpg);
  21.   if(Bitmap->Width>Form1->ImageCacher->Width || Bitmap->Height>Form1->ImageCacher->Height)
  22.   {
  23.    ratio_width= Bitmap->Width/((float)Form1->ImageCacher->Width);
  24.    ratio_height= Bitmap->Height/((float)Form1->ImageCacher->Height);
  25.    if (ratio_width<ratio_height)
  26.     Form1->ImageCacher->Canvas->StretchDraw(Rect(0,0,Bitmap->Width/ratio_height,Bitmap->Height/ratio_height),Bitmap);
  27.    else
  28.     Form1->ImageCacher->Canvas->StretchDraw(Rect(0,0,Bitmap->Width/ratio_width,Bitmap->Height/ratio_width),Bitmap);
  29.    Form1->ImageCacher->Picture->SaveToFile( "D:\\thumb\\thumb_JPG_"+NomFichier+".bmp" ) ;
  30.   }
  31.   else
  32.   {
  33.    Form1->ImageCacher->Canvas->StretchDraw(Rect(0,0,Bitmap->Width,Bitmap->Height),Bitmap);
  34.         Form1->ImageCacher->Picture->SaveToFile( "D:\\thumb\\thumb_JPG_"+NomFichier+".bmp" ) ;
  35.   }
  36.       Bitmap->FreeImage();
  37.       jpg->Empty;
  38.  }
  39.  if(extension == ".bmp"|| extension==".BMP" )
  40.  {
  41.   Bitmap->LoadFromFile(ListeFichiers->Strings[i]);
  42.   if(Bitmap->Width>Form1->ImageCacher->Width || Bitmap->Height>Form1->ImageCacher->Height)
  43.   {
  44.    ratio_width= Bitmap->Width/((float)Form1->ImageCacher->Width);
  45.    ratio_height= Bitmap->Height/((float)Form1->ImageCacher->Height);
  46.    if (ratio_width<ratio_height)
  47.     Form1->ImageCacher->Canvas->StretchDraw(Rect(0,0,Bitmap->Width/ratio_height,Bitmap->Height/ratio_height),Bitmap);
  48.    else
  49.     Form1->ImageCacher->Canvas->StretchDraw(Rect(0,0,Bitmap->Width/ratio_width,Bitmap->Height/ratio_width),Bitmap);
  50.    Form1->ImageCacher->Picture->SaveToFile( "D:\\thumb\\thumb_"+NomFichier) ;
  51.   }
  52.   else
  53.   {
  54.    Form1->ImageCacher->Canvas->StretchDraw(Rect(0,0,Bitmap->Width,Bitmap->Height),Bitmap);
  55.         Form1->ImageCacher->Picture->SaveToFile( "D:\\thumb\\thumb_"+NomFichier) ;
  56.   }
  57.       Bitmap->FreeImage();
  58.     }
  59.   }
  60.   Form1->Label5->Caption="Tout les thumbnails ont été créé";
  61.   return 0;
  62. }

 
Merci de votre aide.


Message édité par TeigneuX le 06-04-2005 à 10:31:16
mood
Publicité
Posté le 06-04-2005 à 10:30:09  profilanswer
 

n°1037817
Lam's
Profil: bas.
Posté le 06-04-2005 à 17:44:11  profilanswer
 

Tu as utilisé un mutex pour être sûr que tu ne dessines pas ton Canvas pendant un appel à StretchDraw ?
 

n°1037866
TeigneuX
Posté le 06-04-2005 à 17:59:43  profilanswer
 

Non, je ne connais pas les mutex. Peut tu m'expliquer stp.Est-ce obligatoire?
Je veut juste que le thread se lance et va au bout de son action mais en tache de fond pour que je puisse visualiser les thumbnails que le thread a deja crée.(avant qu'il ne soit entierement terminé)
merci.

n°1037905
Lam's
Profil: bas.
Posté le 06-04-2005 à 18:25:45  profilanswer
 

J'ai regardé par curiosité (je ne connais pas BCB), et visiblement, d'après ce doc (qui est pour Delphi, mais ça doit se valoir):
http://safariexamples.informit.com [...] pter11.pdf
 
Tu dois pouvoir faire un :

Code :
  1. Form1->ImageCacher->Canvas->Lock();


et un Unlock() à la fin, lorsque tu dessines sur ton Canvas depuis différents threads.

n°1037997
squelletto​r
Posté le 06-04-2005 à 19:23:35  profilanswer
 

Slt,
C moi qui ai posé la question.En faite j'utilisai le compte d'un copain pour poster car le mien n'etait pas encore crée.
 
Je vien d'essayer et ca marche !!!!!
 
Merci beaucoup !


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

  Probleme de thread qui bug quand on bouge la souris

 

Sujets relatifs
[JBuilder][WebLogic][EJB] HELP Problème pour tester mon entity beanProbleme d'acces a mon site [urgentissime]
Probleme intégration video dans Dreamweaver /!\ HELP /!\[wxWidget] èvènement et problème d'anglais
Problème dans un mail html envoyé avec PHPProbleme creation de fichier excel a partir de php
Problème upload gros fichiersProblème liste chainée
[Eclipse] Problème mise à jour [résolu]problème avec mysql ou moi !!!!
Plus de sujets relatifs à : Probleme de thread qui bug quand on bouge la souris


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