TeigneuX | 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 :
- DWORD WINAPI ThreadProc(LPVOID lpParam)
- {
- AnsiString extension,NomFichier;
- Form1->Label5->Caption="Création des fichiers Thumbnails en cours..." ;
- TJPEGImage *jpg = new TJPEGImage();
- Graphics::TBitmap * Bitmap = new Graphics::TBitmap;
- float ratio_width;
- float ratio_height;
- for (int i=15; i<ListeFichiers->Count; i++)
- {
- Form1->ImageCacher->Canvas->Brush->Color = clWhite;
- Form1->ImageCacher->Canvas->FillRect(Form1->ImageCacher->Canvas->ClipRect);
- extension=ExtractFileExt(ListeFichiers->Strings[i]);
- NomFichier=ExtractFileName(ListeFichiers->Strings[i]);
- Form1->Label6->Caption=NomFichier;
- if (extension==".jpg"|| extension==".jpeg" || extension==".JPG"|| extension==".JPEG" )
- {
- jpg->LoadFromFile(ListeFichiers->Strings[i]);
-
- Bitmap->Assign(jpg);
- if(Bitmap->Width>Form1->ImageCacher->Width || Bitmap->Height>Form1->ImageCacher->Height)
- {
- ratio_width= Bitmap->Width/((float)Form1->ImageCacher->Width);
- ratio_height= Bitmap->Height/((float)Form1->ImageCacher->Height);
- if (ratio_width<ratio_height)
- Form1->ImageCacher->Canvas->StretchDraw(Rect(0,0,Bitmap->Width/ratio_height,Bitmap->Height/ratio_height),Bitmap);
- else
- Form1->ImageCacher->Canvas->StretchDraw(Rect(0,0,Bitmap->Width/ratio_width,Bitmap->Height/ratio_width),Bitmap);
- Form1->ImageCacher->Picture->SaveToFile( "D:\\thumb\\thumb_JPG_"+NomFichier+".bmp" ) ;
- }
- else
- {
- Form1->ImageCacher->Canvas->StretchDraw(Rect(0,0,Bitmap->Width,Bitmap->Height),Bitmap);
- Form1->ImageCacher->Picture->SaveToFile( "D:\\thumb\\thumb_JPG_"+NomFichier+".bmp" ) ;
- }
- Bitmap->FreeImage();
- jpg->Empty;
- }
- if(extension == ".bmp"|| extension==".BMP" )
- {
- Bitmap->LoadFromFile(ListeFichiers->Strings[i]);
- if(Bitmap->Width>Form1->ImageCacher->Width || Bitmap->Height>Form1->ImageCacher->Height)
- {
- ratio_width= Bitmap->Width/((float)Form1->ImageCacher->Width);
- ratio_height= Bitmap->Height/((float)Form1->ImageCacher->Height);
- if (ratio_width<ratio_height)
- Form1->ImageCacher->Canvas->StretchDraw(Rect(0,0,Bitmap->Width/ratio_height,Bitmap->Height/ratio_height),Bitmap);
- else
- Form1->ImageCacher->Canvas->StretchDraw(Rect(0,0,Bitmap->Width/ratio_width,Bitmap->Height/ratio_width),Bitmap);
- Form1->ImageCacher->Picture->SaveToFile( "D:\\thumb\\thumb_"+NomFichier) ;
- }
- else
- {
- Form1->ImageCacher->Canvas->StretchDraw(Rect(0,0,Bitmap->Width,Bitmap->Height),Bitmap);
- Form1->ImageCacher->Picture->SaveToFile( "D:\\thumb\\thumb_"+NomFichier) ;
- }
- Bitmap->FreeImage();
- }
- }
- Form1->Label5->Caption="Tout les thumbnails ont été créé";
- return 0;
- }
|
Merci de votre aide. Message édité par TeigneuX le 06-04-2005 à 10:31:16
|