Ошибка при работе с потоками(

  • Автор темы SeRGeaNT
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

SeRGeaNT

Гость
#1
В общем проблема с курсовой работой(. Нужно сделать два варианта обработки файлов: последовательную и параллельную. Второй вариант отказывается работать при количестве файлов больше 4-5((, а надо чтобы с 10ю работала(. Помогите пожалуйста!( Не понимаю в чём ошибка(
Код:
//Задание : Переставить строки файла в обратном порядке
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <iostream.h>
#include <cstring.h>
#include <fstream.h>
#include <vector>
using namespace std;
HANDLE hThread[10];  	 // дескрипторы потоков
DWORD IDThread[10];	 // идентификаторы потоков
HANDLE WINAPI hSemaphore;
BOOL WINAPI cReleaseCount;
clock_t StartTime, EndTime; // Время начала и завершения обработки
DWORD ThreadProc(char *fname)
{
char foname[30]="rez";
vector<string> vect;
string str;
strcat(foname,fname);
ifstream fin(fname);
if(fin.fail())
{
cout<<"Oshibka otkritiya faila!\n";
exit(0);
}
while(!fin.eof()) {
getline(fin,str);
vect.push_back(str);
}
ofstream fout(foname);
if(fout.fail())
{
cout<<"Oshibka otkritiya faila!\n";
exit(0);
}
while (!vect.empty())
{
fout<<vect.back()<<endl;
vect.pop_back();
}
fin.close();
fout.close();
ReleaseSemaphore(hSemaphore,1,NULL);
return 0;
}
int main(int argc, char *argv[])
{
int N;
int i,k;
N=argc-1;
StartTime = clock(); // Запомнили время начала обработки
if (argc<2)
{
cout << "Nedostatochno parametrov!"<<endl;
exit(0);
}
if (argc>11)
{
cout << "Slishkom mnogo failov!"<<endl;
exit(0);
}
for(i=argc-1; i>=1;i--)
for(k=1; k<=argc-1; k++)
if(k!=i)
if(strcmp(argv[i],argv[k])==0) {
cout<<"Oshibka! Odinakovie imena failov!"<<endl;
exit(0);
}
hSemaphore=CreateSemaphore(NULL,5,5,NULL);
for (int i=0;i<=N;i++)
{
WaitForSingleObject(hSemaphore,INFINITE);
hThread[i]=CreateThread(NULL,0,ThreadProc,argv[i+1],0,&IDThread[i]);
}
// Ожидание завершения потоков
WaitForMultipleObjects(N,hThread,TRUE,INFINITE);
EndTime = clock(); // Запомнили время окончания обработки
//Вывод продолжительности обработки и завершение программы
cout <<"Elapsed Time " <<(EndTime-StartTime)<<" ms"<< endl;
getch();
return 0;
}
 
Статус
Закрыто для дальнейших ответов.