如何使用多个线程读取大量文件,请帮帮我!

时间:2010-05-03 13:18:07

标签: multithreading mfc

在我的应用程序中有一小部分功能,其中它将读取文件以获取一些信息,filecount的数量将是50,所以我想实现线程。如果用户提供50个文件,我想把它分开为5 * 10,应该创建5个线程,这样每个线程都可以处理10个文件,这可以加快进程。而且从下面的代码你可以看到一些变量是常见的。我读了一些文章关于线程,我知道只有一个线程应该访问我的变量/控件(CCriticalStiuation可用于此)。对于我作为初学者,我发现很难实现我对线程的了解。有人请给我对下面显示的代码有所了解......提前谢谢

file read function://
void CMyClass::GetWorkFilesInfo(CStringArray& dataFilesArray,CString* dataFilesB,

                        int* check,DWORD noOfFiles,LPWSTR path)

{
        CString cFilePath;  
    int cIndex =0;
    int exceptionInd = 0;
        wchar_t** filesForWork = new wchar_t*[noOfFiles];
    int tempCheck;
    int localIndex =0;
    for(int index = 0;index < noOfFiles; index++)
    {
        tempCheck = *(check + index);
        if(tempCheck == NOCHECKBOX)
        {
            *(filesForWork+cIndex) = new TCHAR[MAX_PATH];
        wcscpy(*(filesForWork+cIndex),*(dataFilesB +index));
            cIndex++;
        }
        else//CHECKED or UNCHECKED
        {
            dataFilesArray.Add(*(dataFilesB+index));
            *(check + localIndex) = *(check + index);
        localIndex++;

        }

    }
    WorkFiles(&cFilePath,dataFilesArray,filesForWork,
                    path,
                    cIndex);
    dataFilesArray.Add(cFilePath);
    *(check + localIndex) = CHECKED;

}

1 个答案:

答案 0 :(得分:0)

我认为你最好只用一个线程来读取所有文件。线程之间的上下文切换以及同步问题在您的示例中确实不值得。硬盘驱动器是一种资源,所以想象所有五个线程轮流将硬盘驱动器读取头移动到硬盘驱动器上的各个位置==不是非常有效。