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

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем SeRGeaNT, 11 янв 2009.

Статус темы:
Закрыта.
  1. SeRGeaNT

    SeRGeaNT Гость

    В общем проблема с курсовой работой(. Нужно сделать два варианта обработки файлов: последовательную и параллельную. Второй вариант отказывается работать при количестве файлов больше 4-5((, а надо чтобы с 10ю работала(. Помогите пожалуйста!( Не понимаю в чём ошибка(
    Код (Text):
    //Задание : Переставить строки файла в обратном порядке
    #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;
    }
    [​IMG]
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей