
Программа 1. Последовательная обработка файлов (однопоточное приложение)
//выполнил Конышев В.В.
//Студент группы УИС-311
//Вариант №5
//Перевести все буквенные символы текста в верхний регистр
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <iostream>
#include <stdio.h>
using namespace std;
clock_t StartTime, EndTime; // Время начала и завершения обработки
//Функция обработки файла
DWORD FileProc(char *fname)
{
char* fname2 = new char[sizeof(&fname)+6];
sprintf(fname2, "%s%s",fname,"_2.txt");
int tmp;
FILE* f = fopen(fname,"r");
FILE* g = fopen(fname2,"w");
// Проверка открытия файлов
if(!fname)return 0;
if(!fname2)return 0;
while (!feof(f))
{
tmp = fgetc(f);
if(tmp>='a' && tmp<='z')
{
fputc((char)tmp-32,g);
}
else
{
if(tmp!='я')
{
fputc(tmp,g);
}
}
}
fclose(f);
fclose(g);
return 0;
}
int main(int argc, char *argv[])
{
if (argc <2)
{
// Не введены параметры, программа завершается
cout << "DATA NOT ENTERED!";
getch();
return 0;
}
// Проверка на совпадение имен файлов
for (int i=1;i<=argc-1;i++)
{
for (int j=i+1;j<=argc-1;j++)
{
if(!strcmp(argv[i],argv[j]))
{
cout << "FILE NAMES ARE EQUALS!" << endl;
getch();
return 0;
}
}
}
StartTime = clock(); // Запомнили время начала обработки
int i;
for (i=1;i<=argc-1;i++)
{
//Вызов функции обработки файла
FileProc(argv[i]);
}
EndTime = clock(); // Запомнили время окончания обработки
//Вывод продолжительности обработки и завершение программы
cout <<"Elapsed Time " << (EndTime-StartTime)<< " ms" << endl;
getch();
return 0;
}
Программа 2. Параллельная обработка файлов (многопоточное приложение)
//выполнил Конышев В.В.
//Студент группы УИС-311
//Вариант №5
//Перевести все буквенные символы текста в верхний регистр
#include <windows.h>
#include <time.h>
#include <conio.h>
#include <iostream>
#include <stdio.h>
using namespace std;
HANDLE hThread[10]; // дескрипторы потоков
DWORD IDThread[10]; // идентификаторы потоков
DWORD dwExitCode[10]; // коды завершения потоков
DWORD ThreadProc(char *fname); // функция потока
clock_t StartTime, EndTime; // Время начала и завершения обработки
//Функция обработки файла
DWORD ThreadProc(char *fname)
{
char* fname2 = new char[sizeof(&fname)+6];
sprintf(fname2, "%s%s",fname,"_2.txt");
int tmp;
FILE* f = fopen(fname,"rb");
FILE* g = fopen(fname2,"wt");
// Проверка открытия файлов
if(!fname)return 0;
if(!fname2)return 0;
while (!feof(f))
{
tmp = fgetc(f);
if(tmp>='a' && tmp<='z')
{
fputc((char)tmp-32,g);
}
else
{
if(tmp!='я')
{
fputc(tmp,g);
}
}
}
fclose(f);
fclose(g);
return 0;
}
int main(int argc, char *argv[])
{
int N;
N=argc-1;
if (argc <2)
{
// Не введены параметры, программа завершается
cout << "DATA NOT ENTERED!";
getch();
return 0;
}
// Проверка на совпадение имен файлов
for (int i=1;i<=argc-1;i++)
{
for (int j=i+1;j<=argc-1;j++)
{
if(!strcmp(argv[i],argv[j]))
{
cout << "FILE NAMES ARE EQUALS!" << endl;
getch();
return 0;
}
}
}
StartTime = clock(); // Запомнили время начала обработки
for (int i=0;i<N;i++)
{
// Создание потока для выполнения функции обработки файла
hThread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,argv[i+1],0,&IDThread[i]);
if (hThread[i]==NULL)
{
cout << "THREAD ERROR!" << endl;
return 0;
}
}
// Ожидание завершения потоков
WaitForMultipleObjects(N,hThread,TRUE,INFINITE);
EndTime = clock(); // Запомнили время окончания обработки
//Вывод продолжительности обработки и завершение программы
cout <<"Elapsed Time " <<(EndTime-StartTime)<<" ms"<< endl;
getch();
return 0;
}