1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Проблема вот в чем : в функциях win32api CreateThread и _beginthreadex как параметр функции-потока передается указатель на void. Для bcw 5.5 подойдет любой параметр,а вот gcc выдает ошибку о неправильном использовании void-параметра. Как обойти?переносить код на borland c++ 5.5 времени нет, да и исправлять всё там муторно.. в VS08 этот проект так же не переноситься..как быть?
Необходимо использовать какие-либо средства для синхронизации?
Необходимо запрещать доступ к файлу, в который пишется информация, одновременно нескольким потокам... Проще всего - реализовать через Event-ы: в начале работы программы создаешь событие, которое будет контролировать доступ к файлу результатов:
HANDLE myEvent; // в H-файле эта переменная описана через extern
, а для того, чтобы гарантировать, что пока один поток пишет в файл, другой будет ждать освобождения файла, чуть-чуть меняешь функцию потока:
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();
WaitForSingleObject(myEvent, INFINITE); // если Event сброшен - ждать SaveResults(PS, parsedst); SetEvent(myEvent); // По окончании записи в файл разрешить записывать другим
return TRUE; }
Вот и все, теперь информация от всех тредов будет сохранена...