【发布时间】:2010-05-11 08:07:32
【问题描述】:
我有一个函数可以将一堆文件压缩成一个压缩文件..它需要很长时间(压缩),所以我尝试在我的应用程序中实现线程..假设我有 20 个文件压缩,我将其分隔为 5*4=20,为了做到这一点,我对所有 4 个线程都有单独的变量(用于压缩)以避免锁定,我将等到 4 个线程完成..现在..线程正在工作,但我看不到它们的性能有所改善。通常在实现线程之后需要 1 分钟来处理 20 个文件(例如)...只有 5 或 3 秒的差异。有时是相同的。 这里我将展示 1 个线程的代码(其他 3 个线程也是如此)
//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;
}
【问题讨论】:
-
你确认压缩的瓶颈是CPU,你真的有多个内核可用吗?如果瓶颈是文件系统,那么让更多的线程来完成这项工作并没有什么不同。
标签: multithreading mfc