Поиск файлов по маске в каталогах, количество потоков меньше каталогов в 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);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Привет всем! Помогите решить задачуТекст: Дана последовательность
Если у меня есть эта функция в моей программе, я получаю сообщение "'error' was not declared in this scope"Какую библиотеку следует включить, чтобы мой код...
Программа падает в Qt после того как я начинаю в ручную записывать библиотекуТ
Нужно осуществить циклический сдвиг элементов квадратной матрицы размерности MxN вправо на k элементов таким образом: элементы 1-й строки...