Не работает FindFirstFileA в WinApi в потоках

273
02 мая 2017, 07:34

Поиск файлов по маске в каталогах, количество потоков меньше каталогов в 2 раза.

Не работают функции FindFirstFileA и FindNextFileA, дело однозначно в параметре (LPCSTR)data->path2.c_str(), т к в безпоточном варианте все работает, а там все прописано аналогично, кроме этого параметра. Ошибок никаких не выдает.

typedef struct
{
std::string path1;
std::string path2;
} TParams;
DWORD WINAPI FolderSearch(VOID* pParam)
{
TParams * data = (TParams *)pParam;
WIN32_FIND_DATAA fd;
HANDLE hf = FindFirstFileA(
    (LPCSTR)data->path1.c_str(), // имя файла
    &fd             // буфер данных
    );
if (hf != INVALID_HANDLE_VALUE)
{
    printf("%s\n", fd.cFileName);
    while (FindNextFileA(hf, &fd))
    {
        printf("%s\n", fd.cFileName);
    }
    FindClose(hf);
}
WIN32_FIND_DATAA fd2;
HANDLE hf2 = FindFirstFileA(
    (LPCSTR)data->path2.c_str(), // имя файла
    &fd2             // буфер данных
    );
if (hf2 != INVALID_HANDLE_VALUE)
{
    printf("%s\n", fd2.cFileName);
    while (FindNextFileA(hf2, &fd2))
    {
        printf("%s\n", fd2.cFileName);
    }
    FindClose(hf2);
}
return 0;
}
int first = 0, second = 0;
DWORD ThreadID;
for (int i = 0; i<foldersCount/2; i++){
    //folders[i].append(mask);
    first = i * 2;
    second = first + 1;
    tparams[i].path1 = folders[first].append(mask);
    tparams[i].path2 = folders[second].append(mask);
    printf("\ndir1 = %s", tparams[i].path1.c_str());
    printf("\ndir2 = %s", tparams[i].path2.c_str());
    aThread[i] = CreateThread(
        NULL,                                   // дескриптор защиты
        0,                                      // начальный размер стека
        (LPTHREAD_START_ROUTINE)FolderSearch,   // функция потока 
        (void*)&tparams[i],                     // параметр потока
        0,                                      // опции создания
        &ThreadID                               // идентификатор потока
        );
}

Вот так это реализовано последовательным алгоритмом

DWORD WINAPI Siquential(LPCSTR param)
{
WIN32_FIND_DATAA fd;
HANDLE hf = FindFirstFileA(
    (LPCSTR)param, // имя файла
    &fd            // буфер данных
    );
if (hf != INVALID_HANDLE_VALUE)
{
    printf("%s\n", fd.cFileName);
    while (FindNextFileA(hf, &fd))
    {
        printf("%s\n", fd.cFileName);
    }
    FindClose(hf);
}
return 0;
}
clock_t tim;
tim = clock();
for (int i = 0; i<foldersCount; i++){
folders[i].append(mask);
Siquential((LPCSTR)folders[i].c_str());
}
tim = clock();
printf("\nSiquential time = %f\n\n", (double)tim / CLOCKS_PER_SEC);
READ ALSO
Энтропия и её свойства [требует правки]

Энтропия и её свойства [требует правки]

Привет всем! Помогите решить задачуТекст: Дана последовательность

237
Ошибка в функции | C++

Ошибка в функции | C++

Если у меня есть эта функция в моей программе, я получаю сообщение "'error' was not declared in this scope"Какую библиотеку следует включить, чтобы мой код...

218
Ошибка в Qt: During startup program exited with code 0xc0000135

Ошибка в Qt: During startup program exited with code 0xc0000135

Программа падает в Qt после того как я начинаю в ручную записывать библиотекуТ

333
Циклический сдвиг элементов матрицы

Циклический сдвиг элементов матрицы

Нужно осуществить циклический сдвиг элементов квадратной матрицы размерности MxN вправо на k элементов таким образом: элементы 1-й строки...

633