1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Проблема вот в чем : в функциях win32api CreateThread и _beginthreadex как параметр функции-потока передается указатель на void. Для bcw 5.5 подойдет любой параметр,а вот gcc выдает ошибку о неправильном использовании void-параметра. Как обойти?переносить код на borland c++ 5.5 времени нет, да и исправлять всё там муторно.. в VS08 этот проект так же не переноситься..как быть?
path += "\\"; hFile = FindFirstFile(s, &dFile); if (hFile != INVALID_HANDLE_VALUE) { do { vect.push_back(path + dFile.cFileName); } while (FindNextFile(hFile, &dFile) != 0); FindClose(hFile); } }
unsigned int GetDividerCount(std::string &s, char& devider)//not changed { int count = 0; for (unsigned int i = 0; i < s.size(); i++) if (s.at(i) == devider) count++; return count; }
std::string Parser(std::string &s, char& devider)//not changed { std::string bufs; int n = s.find('.'); bufs.append(s, 0, n); s.erase(0, n + 1); return bufs; }
{ ofstream outfile("result.txt", std::ios::app); outfile << "\nFive longest strings for file " << " : \n"; for (unsigned int i = 0; i < 5; i++) outfile << i + 1 << " - " << PS[i] << "\n"; outfile << "\nTotal count of parsed strings for this file : " << parsedst << "\n"; outfile.close(); }
bool MainFunction(std::string *v) { std::string String;//целая строка из файла std::vector<std::string> PS;// вектор разбитых строк char d = '.';//разделитель предложений std::size_t parsedst = 0;//кол-во обработанных строк unsigned int dcount = 0;//кол-во разделителей в файле определяет кол-во предложений в файле. String = GetStringFromFile(*v); dcount = GetDividerCount(String, d); for (unsigned int j = 0; j < dcount; j++) PS.push_back(Parser(String, d)); std::sort(PS.begin(), PS.end(), comp); parsedst = PS.size(); SaveResults(PS, parsedst); return TRUE; }
Запускается через командную строку, ввиде : prog.exe *ПУТЬ к папке с файлами формата txt* *кол-во файлов для обработки* Например C:\some\pr.exe C:\1 10. Программа читает файлы и создает результирующий файл, в котором записываются 5 самых длинных предложений для каждого файла. Предложения разделяются символом "." . Прикладываю архив с файлами для обработки. Проблема вот в чем, я раньше выкладывал этот код для одно-потокового варианта, сейчас надо организовать многопоточность. Основная проблема в том, что в результирующем файл записываются результаты не для всех файлов. В принципе, это наверное из-за асинхронизации процессов. Необходимо использовать какие-либо средства для синхронизации?Ну, допустим, мьютексы. Я прав? Если нет , то в чем ошибка?