Форум программистов CodeGuru
22 Июнь 2018, 09:18:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка при работе с потоками(  (Прочитано 22858 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SeRGeaNT
Новичок
*
Офлайн Офлайн

Сообщений: 1


Просмотр профиля
« : 11 Январь 2009, 18:55:30 »

В общем проблема с курсовой работой(. Нужно сделать два варианта обработки файлов: последовательную и параллельную. Второй вариант отказывается работать при количестве файлов больше 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;
}
Записан
ATAMAN200
Интересующийся
**
Офлайн Офлайн

Сообщений: 29


Просмотр профиля
« Ответ #1 : 26 Сентябрь 2010, 22:38:59 »

Что именно обрабатывать в файлах должна программа?
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #2 : 28 Сентябрь 2010, 16:23:17 »

Второй вариант отказывается работать при количестве файлов больше 4-5((, а надо чтобы с 10ю работала(.

Как понять "отказывается работать" ?
Не обрабатывает файлы, или что ?

Смотрю, имена файлов передаются в командной строке.
Возможно, слишком длинные пути к файлам ? Или в путях есть пробелы (тогда надо заключать их в кавычки: "путь").
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!