Как читать большое количество файлов, используя несколько потоков, помогите мне, пожалуйста! - PullRequest
0 голосов
/ 03 мая 2010

в моем приложении есть небольшая часть функции, в которой оно будет считывать файлы, чтобы получить некоторую информацию, число файлов будет равно 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 голосов
/ 03 мая 2010

Я думаю, вам было бы лучше иметь всего одну ветку для чтения всех файлов. Переключение контекста между потоками вместе с проблемами синхронизации действительно не стоит своей цены в вашем примере. Жесткий диск является одним из ресурсов, поэтому представьте, что все пять потоков по очереди перемещают головки чтения жесткого диска в различные положения на жестком диске == не очень эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...