
Программа 3. Параллельная обработка файлов с высоким приоритетом (многопоточное приложение)
//выполнил Конышев В.В.
//Студент группы УИС-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,"wb");
// Проверка открытия файлов
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;
StartTime = clock(); // Запомнили время начала обработки
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;
}
}
}
for (int i=0;i<N;i++)
{
// Создание потока для выполнения функции обработки файла
hThread[i]=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,argv[i+1],CREATE_SUSPENDED,&IDThread[i]);
if (hThread[i]==NULL)
{
cout << "THREAD ERROR!" << endl;
return 0;
}
}
for (int i=0;i<N;i++)
{
SetThreadPriority(hThread[i], THREAD_PRIORITY_HIGHEST); // Установка наивысшего приоритета потока
}
for (int i=0;i<N;i++)
{
ResumeThread(hThread[i]); // Запуск потоков с назначенным приоритетом
}
// Ожидание завершения потоков
WaitForMultipleObjects(N,hThread,TRUE,INFINITE);
EndTime = clock(); // Запомнили время окончания обработки
//Вывод продолжительности обработки и завершение программы
cout <<"Elapsed Time " <<(EndTime-StartTime)<<" ms"<< endl;
getch();
return 0;
}
Результаты работы программ: Таблица №1 (Съемный flash диск)
Режим |
N |
t1 |
t2 |
t3 |
t4 |
t5 |
t |
AH |
1 |
1,453 |
1,163 |
1,363 |
1,196 |
0,887 |
1,2124 |
|
2 |
2,734 |
2,578 |
2,348 |
2,375 |
2,078 |
2,4226 |
|
3 |
3,875 |
3,604 |
3,209 |
2,285 |
3,847 |
3,364 |
|
4 |
4,987 |
4,118 |
4,715 |
4,355 |
4,437 |
4,5224 |
|
5 |
4,677 |
5,607 |
5,265 |
5,25 |
6,134 |
5,3866 |
|
6 |
6,522 |
6,217 |
6,672 |
7,086 |
6,278 |
6,555 |
|
7 |
8,422 |
7,789 |
7,53 |
7,244 |
7,69 |
7,735 |
|
8 |
9,239 |
8,634 |
8,594 |
8,016 |
8,396 |
8,5758 |
|
9 |
9,67 |
9,496 |
10,251 |
10,071 |
9,705 |
9,8386 |
|
10 |
11,487 |
11,608 |
10,22 |
11,063 |
10,481 |
10,9718 |
BH |
1 |
1,09 |
0,836 |
1,577 |
0,847 |
1,08 |
1,086 |
|
2 |
2,115 |
1,859 |
2,25 |
2,343 |
1,968 |
2,107 |
|
3 |
3,39 |
2,984 |
3,376 |
3,361 |
3,003 |
3,2228 |
|
4 |
4,181 |
4,238 |
4,223 |
4,329 |
4,118 |
4,2178 |
|
5 |
5,197 |
4,872 |
5,063 |
4,799 |
5,271 |
5,0404 |
|
6 |
6,071 |
6,047 |
5,562 |
6 |
5,794 |
5,8948 |
|
7 |
6,397 |
6,617 |
6,356 |
6,687 |
6,533 |
6,518 |
|
8 |
7,453 |
7,157 |
7,392 |
7,603 |
7,3 |
7,381 |
|
9 |
8,074 |
8,865 |
7,656 |
8,249 |
8,371 |
8,243 |
|
10 |
8,531 |
9,172 |
9,545 |
9,031 |
9,391 |
9,134 |
CH |
1 |
1,328 |
1,187 |
1,197 |
1,207 |
0,878 |
1,1594 |
|
2 |
2,11 |
2,453 |
2,375 |
2,171 |
2,402 |
2,3022 |
|
3 |
3,053 |
3,161 |
3,328 |
2,984 |
3,422 |
3,1896 |
|
4 |
4,028 |
4,107 |
4,027 |
4,092 |
3,671 |
3,985 |
|
5 |
4,437 |
4,64 |
4,625 |
4,977 |
5,143 |
4,7644 |
|
6 |
5,859 |
5,829 |
5,637 |
6,046 |
5,406 |
5,7554 |
|
7 |
6,125 |
6,031 |
6,11 |
6,118 |
6,808 |
6,2384 |
|
8 |
7,263 |
7,22 |
7,211 |
7,431 |
7,101 |
7,2452 |
|
9 |
8,524 |
7,896 |
7,703 |
7,75 |
8,094 |
7,9934 |
|
10 |
8,945 |
8,592 |
8,709 |
9,583 |
9,048 |
8,9754 |
Результаты
работы программ: Таблица
№2 (Жесткий диск HDD)
Режим |
N |
t1 |
t2 |
t3 |
t4 |
t5 |
t |
AH |
1 |
0,734 |
0,718 |
0,718 |
0,698 |
0,721 |
0,7178 |
|
2 |
1,5 |
1,390 |
1,421 |
1,515 |
1,484 |
1,462 |
|
3 |
2,281 |
2,265 |
2,261 |
2,285 |
2,265 |
2,2714 |
|
4 |
3 |
3,15 |
3,46 |
3,31 |
3,218 |
3,2276 |
|
5 |
3,765 |
3,875 |
3,906 |
3,859 |
3,835 |
3,848 |
|
6 |
4,452 |
4,684 |
4,836 |
4,668 |
4,531 |
4,6342 |
|
7 |
6,015 |
5,265 |
5,375 |
5,437 |
5,496 |
5,5176 |
|
8 |
6,140 |
6,359 |
6,386 |
6,197 |
6,109 |
6,2382 |
|
9 |
7,031 |
7,047 |
7,750 |
4,844 |
6,868 |
6,708 |
|
10 |
8,443 |
8,829 |
7,857 |
7,927 |
7,690 |
8,1492 |
BH |
1 |
0,734 |
0,728 |
0,707 |
0,687 |
0,718 |
0,7148 |
|
2 |
1,330 |
1,333 |
1,356 |
1,329 |
1,351 |
1,3398 |
|
3 |
1,562 |
1,578 |
1,641 |
1,578 |
1,562 |
1,5842 |
|
4 |
1,796 |
1,750 |
1,868 |
1,658 |
1,851 |
1,7846 |
|
5 |
2,312 |
2,187 |
2,156 |
2,235 |
2,187 |
2,2154 |
|
6 |
2,584 |
2,656 |
2,5 |
2,687 |
2,562 |
2,5978 |
|
7 |
2,922 |
3 |
3,359 |
3,265 |
3,328 |
3,1748 |
|
8 |
3,328 |
3,297 |
3,218 |
3,156 |
3,172 |
3,2342 |
|
9 |
3,511 |
3,547 |
3,797 |
3,513 |
3,695 |
3,6126 |
|
10 |
3,672 |
3,859 |
3,609 |
3,781 |
3,750 |
3,7342 |
CH |
1 |
0,752 |
0,662 |
0,656 |
0,656 |
0,671 |
0,6794 |
|
2 |
1,321 |
1,294 |
1,345 |
1,312 |
1,296 |
1,3136 |
|
3 |
1,531 |
1,581 |
1,590 |
1,568 |
1,640 |
1,582 |
|
4 |
1,437 |
1,796 |
1,738 |
1,850 |
1,725 |
1,7092 |
|
5 |
1,984 |
2,187 |
2,078 |
2,109 |
2,125 |
2,0966 |
|
6 |
2,539 |
2,376 |
2,533 |
2,375 |
2,546 |
2,4738 |
|
7 |
2,765 |
2,531 |
2,875 |
2,859 |
3,104 |
2,8268 |
|
8 |
3,672 |
3,656 |
2,890 |
3,125 |
3,203 |
3,3092 |
|
9 |
3,779 |
3,812 |
3,757 |
3,578 |
3,328 |
3,5508 |
|
10 |
4,126 |
3,922 |
3,640 |
3,640 |
3,678 |
3,6012 |
|
|
|
|
|
|
|
|
Режим |
Файлы на гибком диске (F) |
|||||||||
N=1 |
N=2 |
N=3 |
N=4 |
N=5 |
N=6 |
N=7 |
N=8 |
N=9 |
N=10 |
|
A |
1,2124 |
2,4226 |
3,364 |
4,5224 |
5,3866 |
6,555 |
7,735 |
8,5758 |
9,8386 |
10,9718 |
B |
1,086 |
2,107 |
3,2228 |
4,2178 |
5,0404 |
5,8948 |
6,518 |
7,381 |
8,243 |
9,134 |
C |
1,1594 |
2,3022 |
3,1896 |
3,985 |
4,7644 |
5,7554 |
6,2384 |
7,2452 |
7,9934 |
8,9754 |
Режим |
Файлы на жестком диске (H) |
|||||||||
N=1 |
N=2 |
N=3 |
N=4 |
N=5 |
N=6 |
N=7 |
N=8 |
N=9 |
N=10 |
|
A |
0,7178 |
1,462 |
2,2714 |
3,2276 |
3,848 |
4,6342 |
5,5176 |
6,2382 |
6,708 |
8,1492 |
B |
0,7148 |
1,3398 |
1,5842 |
1,7846 |
2,2154 |
2,5978 |
3,1748 |
3,2342 |
3,6126 |
3,7342 |
C |
0,6794 |
1,3136 |
1,582 |
1,7092 |
2,0966 |
2,4738 |
2,8268 |
3,3092 |
3,5508 |
3,6012 |
Вывод: Исходя из полученных экспериментальных данных можно сделать вывод, что для съемного flash носителя лучше всего использовать многопоточную программу с высоким приоритетом потоков. Т.к. она имеет относительно быстрейший результат выполнения обработки файлов с учетом задания.
Исходя из полученных экспериментальных данных можно сделать вывод, что для жесткого диска HDD целесообразней использовать многопоточную программу с высоким приоритетом потоков. Т.к. она имеет относительно быстрейший результат выполнения обработки файлов с учетом задания
ЛИТЕРАТУРА
-
Конспект лекций «Операционные системы» Варфоломеев В.А.
-
Фролов А.В., Фролов Г.В. Программирование для Windows NT. — М.: ДИАЛОГ-МИФИ, 1996.— 272 с.— (Библиотека системного программиста; т. 26)
-
Киммел П. Borland C++ 5, — Спб.: BHV-Санкт-Петербург, 1999
-
Верма Р. Справочник по функциям Win 32 API, М:, «Горячая линия – Телеком
-
Румянцев П.В. Азбука программирования Win32 API, «Радио и Связь», 1999
-
Google