J'ai une fonction où je vais compresser un tas de fichiers dans un seul fichier compressé .. il prend beaucoup de temps (pour compresser), donc j'ai essayé d'implémenter le filetage dans mon application .. Si j'ai 20 fichiers pour la compression , J'ai séparé cela comme 5 * 4 = 20, afin de faire que j'ai des variables séparées (qui sont utilisées pour la compression) pour tous les 4 threads afin d'éviter les verrous et je vais attendre jusqu'à ce que les 4 threads finit .. Maintenant les threads fonctionnent mais je ne vois pas d'amélioration dans leurs performances ... Normalement, il faudra 1 min pour 20 fichiers (par exemple) après la mise en œuvre du threading ... il y a seulement 5 ou 3 secondes de différence, parfois la même chose. ici i affiche le code pour 1 fil (il est donc pour les fils Autres3)S'il vous plaît dites-moi ce qui ne va pas avec mon filetage!
//main thread
myClassObject->thread1 = AfxBeginThread((AFX_THREADPROC)MyThreadFunction1,myClassObject);
....
HANDLE threadHandles[4];
threadHandles[0] = myClassObject->thread1->m_hThread;
....
WaitForSingleObject(myClassObject->thread1->m_hThread,INFINITE);
UINT MyThreadFunction(LPARAM lparam)
{
CMerger* myClassObject = (CMerger*)lparam;
CString outputPath = myClassObject->compressedFilePath.GetAt(0);//contains the o/p path
wchar_t* compressInputData[] = {myClassObject->thread1outPath,
COMPRESS,(wchar_t*)(LPCTSTR)(outputPath)};
HINSTANCE loadmyDll;
loadmydll = LoadLibrary(myClassObject->thread1outPath);
fp_Decompress callCompressAction = NULL;
int getCompressResult=0;
myClassObject->MyCompressFunction(compressInputData,loadClient7zdll,callCompressAction,myClassObject->thread1outPath,
getCompressResult,minIndex,myClassObject->firstThread,myClassObject);
return 0;
}
Avez-vous confirmé que le goulot d'étranglement pour la compression est le processeur et avez-vous réellement plusieurs cœurs disponibles? Si le goulot d'étranglement est le système de fichiers, alors avoir plus de threads faisant le travail ne fera aucune différence. –