Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ПУТЕЙ СООБЩЕНИЯ(МИИТ)
Институт Управления и Информационных Технологий
«Операционные системы»
К У Р С О В А Я Р А Б О Т А
Тема:
«ОРГАНИЗАЦИЯ МНОГОПОТОЧНЫХ ПРИЛОЖЕНИЙ В ОС WINDOWS»
ЦЕЛЬ РАБОТЫ: практическое изучение методов создания и управления потоками в операционной системе Windows и разработка многопоточных приложений на языке C++ с использованием интерфейса прикладного программирования WIN32 API.
ВАРИАНТ N3.
Выполнила: студентка гр. УИС-311
Проверил: _______
МОСКВА - 2004г.
ОГЛАВЛЕНИЕ
Текст задания ....................................................................................................3
Блок-схема программы A ....................................................................................4
Блок-схема программы B ....................................................................................5
Блок-схема функции, обрабатывающей строку параметров.........................................................................................................6
Текст программы А............................................................................................7-8
Текст программы B ............................................................................................8-9
Текст программы C ..........................................................................................10-11
Результат работы программы для одного из файлов..............................................11
Скриншоты окна утилиты pview программ B и C ....................................................12
Описание и результаты проведенного эксперимента.............................................13
Таблица1............................................................................................................13
Таблица2............................................................................................................14
График1…...........................................................................................................14
График2…...........................................................................................................15
Выводы по результатам проведенного эксперимента.............................................15-16
Литература .........................................................................................................16
ТЕКСТ ЗАДАНИЯ
1. Разработать три консольные программы, выполняющие обработку заданного множества файлов по указанному алгоритму.
A – однопоточная программа с последовательной (циклической) обработкой файлов;
B – многопоточная программа с параллельной обработкой файлов;
C – многопоточная программа с повышенным приоритетом потоков.
Обработку файла представить в виде отдельной функции.
В каждой программе производить измерение общего времени обработки всех файлов.
2. Программы должны обрабатывать до 10 файлов одновременно. Файлы подготавливаются заранее и должны содержать текст в формате ASCII, соответствующий требованиям задания. Объем файлов – не менее 10 строк. Имена файлов задаются через параметры командной строки. Предусмотреть контроль вводимых имен – не должны приниматься в обработку одноименные и несуществующие файлы.
3. В многопоточной программе (варианты B и C) для ожидания завершения дочерних потоков воспользоваться функцией WaitForMultipleObjects. Для увеличения приоритетов создаваемых потоков (вариант C) следует воспользоваться функцией SetThreadPriority, выбрав относительный приоритет таким образом, чтобы обеспечить заметное снижение времени выполнения программы. Для контроля приоритетов потоков воспользоваться утилитами pview или pview95 (\bc5\sdktools\).
4. Провести эксперимент с регистрацией времени выполнения обработки файлов для каждого варианта программы (A, B, C) при двух различных способах размещения файлов:
H – на жестком диске;
F – на гибком диске.
Для каждого режима проведения эксперимента (всего шесть режимов, условно обозначаемые AH, BH, CH, AF, BF, CF), варьируя значение N (количество обрабатываемых файлов), произвести не менее 5 опытов (запусков программ). Используемые файлы по именам
Вариант N12
«Подсчитать количество строк в файле»
Блок-схема программы А

Блок-схема программы B

Блок-схема функции, обрабатывающей строку параметров.


ТЕКСТ ПРОГРАММЫ A - однопоточная программа с последовательной (циклической) обработкой файлов.
//Курсовая работа на тему:"Организация многопоточных приложений в ОС Windows"
//Выполнила студентка гр. УИС-311 Титкова Светлана
//программа№1-Однопоточная программа с последовательной обработкой файлов
#include<fstream. h>
#include<conio. h>
#include<stdio. h>
#include<time. h>
clock_t StartTime, EndTime; //Время начала и завершения обработки
//Функция обработки файла
FileProc(char *filename)
{
char buf[80];
int n, num=0;
ifstream f(filename, ios::in|ios::nocreate);
if (!f){
cout<<"\n! OBRABOTKA FAILA: "<<filename<<endl;
cout<<"\n Error! \n "; return 1;
}
cout<<" \n !OBRABOTKA FAILA: "<<filename<<endl;
while (!f. eof()){
f. getline(buf, 81);
for (n=0;n<=strlen(buf);n++)
{ if(n==strlen(buf))
{ num++; }
}
}
cout<<"\nKolichestvo strok v faile: "<<num-1<<endl;
return num;
}
int ParamProc(int num, char *str[])
{
int i, j,f=1;
j=0;
while(f)
{
for(i=j+1;i<num;i++)
{
if(!strcmp(str[j],str[i]))
{
return 1;
}
if(i>=num-1) j++;
}
if(j>=num-1) f=0;
}
return 0;
}
int main(int argc, char *argv[])
{
float r;
StartTime = clock(); //Запомнили время начала обратотки
if (argc < 2)
{
cout<<"\nVI ne vveli parametri v komandnoi stroke!"<<endl;
}
//Если передано больше 1 параметра, то запустить проверку на наличие одноименных
//параметров.
if(argc>2)
{
if(ParamProc(argc, argv))
{
cout<<"Error: The alike parameters! The program terminate.";
return -1;
}
}
int i;
for (i=1;i<=argc-1;i++)
{
FileProc(argv[i]);
}
EndTime = clock(); //Запомнили время окончания обработки
r=(EndTime-StartTime);
cout<<"\n****"<<endl;
printf("Elapsed Time: %1.3f %s",r/1000,"sec.\n");
cout<<"****"<<endl;
return 0;
}
ТЕКСТ ПРОГРАММЫ B - многопоточная программа с параллельной обработкой файлов.
//Курсовая работа на тему:"Организация многопоточных приложений в ОС Windows"
//Выполнила студентка гр. УИС-311 Титкова Светлана
//программа№2-Многопоточная программа с параллельной обработкой файлов
#include <windows. h>
#include <time. h>
#include <conio. h>
#include <iostream. h>
#include <fstream. h>
#include <stdio. h>
HANDLE Thread[10]; // Дескрипторы потоков
unsigned long ThreadID[10]; // Идентификаторы потоков
unsigned long ExitCode[10]; // Коды завершения потоков
clock_t StartTime, EndTime; // Время начала и завершения обработки
//Функция потока
unsigned char ThreadProc(char *filename)
{
char buf[80];
int n, num=0;
ifstream f(filename, ios::in|ios::nocreate);
if (!f){
cout<<"\n! OBRABOTKA FAILA: "<<filename<<endl;
cout<<"Error!\n"; return 1;
}
cout<<"\n! OBRABOTKA FAILA: "<<filename<<endl;
while (!f. eof()){
f. getline(buf, 81);
for (n=0;n<=strlen(buf);n++)
{ if (n==strlen(buf))
{ num++; }
}
}
cout<<"\nKolichestvo strok v faile:"<<num-1<<endl;
return num;
}
int ParamProc(int num, char *str[])
{
int i, j,f=1;
j=0;
while(f)
{
for(i=j+1;i<num;i++)
{
if(!strcmp(str[j],str[i]))
{
return 1;
}
if(i>=num-1) j++;
}
if(j>=num-1) f=0;
}
return 0;
}
int main(int argc, char *argv[])
{
float r;
int N;
N=argc-1;
StartTime = clock(); // Запомнили время начала обработки
if (argc <2)
{
cout<<"\nVi ne vveli parametri v komandnoi stroke!"<<endl;
}
//Если передано больше 1 параметра, то запустить проверку на наличие одноименных
//параметров.
if(argc>2)
{
if(ParamProc(argc, argv))
{
cout<<"Error: The alike parameters! The program terminate.";
return -1;
}
}
for (int i=0;i<=N-1;i++)
{
// Создание потока для выполнения функции обработки файла
Thread[i]=CreateThread(NULL,0,ThreadProc, argv[i+1],0,&ThreadID[i]);
}
// Ожидание завершения потоков
WaitForMultipleObjects(N, Thread, TRUE, INFINITE);
EndTime = clock(); // Запомнили время окончания обработки
//Вывод продолжительности обработки и завершение программы
r=(EndTime-StartTime);
cout<<"\n****"<<endl;
printf("Elapsed Time: %1.3f %s",r/1000,"sec.\n");
cout<<"****"<<endl;
return 0;
}
ТЕКСТ ПРОГРАММЫ C - многопоточная программа с повышенным приоритетом потоков.
//Курсовая работа на тему:"Организация многопоточных приложений в ОС Windows"
//Выполнила студентка гр. УИС-311 Титкова Светлана
//программа№3-Многопоточная программа с повышенным приоритетом потоков.
#include <windows. h>
#include <time. h>
#include <conio. h>
#include <iostream. h>
#include <fstream. h>
#include <stdio. h>
HANDLE Thread[10]; // Дескрипторы потоков
unsigned long ThreadID[10]; // Идентификаторы потоков
unsigned long ExitCode[10]; // Коды завершения потоков
clock_t StartTime, EndTime; // Время начала и завершения обработки
//Функция потока
unsigned char ThreadProc(char *filename)
{
char buf[80];
int n, num=0;
ifstream f(filename, ios::in|ios::nocreate);
if (!f){
cout<<"\n! OBRABOTKA FAILA: "<<filename<<endl;
cout<<"Error!"; return 1;
}
cout<<"\n! OBRABOTKA FAILA: "<<filename<<endl;
while (!f. eof()){
f. getline(buf, 81);
for (n=0;n<=strlen(buf);n++)
{
if (n==strlen(buf))
{ num++; }
}
}
cout<<"\Kolichestvo strok v failen: "<<num-1<<endl;
return 0;
}
int ParamProc(int num, char *str[])
{
int i, j,f=1;
j=0;
while(f)
{
for(i=j+1;i<num;i++)
{
if(!strcmp(str[j],str[i]))
{
return 1;
}
if(i>=num-1) j++;
}
if(j>=num-1) f=0;
}
return 0;
}
int main(int argc, char *argv[])
{
float r;
int N;
N=argc-1;
StartTime = clock(); // Запомнили время начала обработки
if (argc <2)
{
cout<<"\nYou must enter parameters in Command Line!"<<endl;
}
//Если передано больше 1 параметра, то запустить проверку на наличие одноименных
//параметров.
if(argc>2)
{
if(ParamProc(argc, argv))
{
cout<<"Error: The alike parameters! The program terminate.";
return -1;
}
}
for (int i=0;i<=N-1;i++)
{
// Создание потока для выполнения функции обработки файла
Thread[i]=CreateThread(NULL,0,ThreadProc, argv[i+1],CREATE_SUSPENDED,&ThreadID[i]);
SetThreadPriority(Thread[i],THREAD_PRIORITY_TIME_CRITICAL);
ResumeThread(Thread[i]);
}
// Ожидание завершения потоков
WaitForMultipleObjects(N, Thread, TRUE, INFINITE);
EndTime = clock(); // Запомнили время окончания обработки
//Вывод продолжительности обработки и завершение программы
r=(EndTime-StartTime);
cout<<"\n****"<<endl;
printf("Elapsed Time: %1.3f %s",r/1000,"sec.\n");
cout<<"****"<<endl;
return 0;
}
РЕЗУЛЬТАТ РАБОТЫ ПРОГРАММЫ ДЛЯ ОДНОГО ИЗ ФАЙЛОВ.
“Последовательная обработка файлов на диске «С»”
C:\...урс\Операционные системы\курсовой\курсовая>KursoSSS.exe 3.txt
!OBRABOTKA FAILA: 3.txt
Kolichestvo strok v faile: 5389
****
Elapsed Time: 0.060 sec.
****
“Параллельная обработка файлов на диске «С»”
C:\...урс\Операционные системы\курсовой\курсовая>KursoSSS1.exe 3.txt
!OBRABOTKA FAILA: 3.txt
Kolichestvo strok v faile:5389
****
Elapsed Time: 0.040 sec.
****
“ Обработка файлов с повышенным приоритетом на диске «С»”
C:\...урс\Операционные системы\курсовой\курсовая>KursoSSS2.exe 3.txt
!OBRABOTKA FAILA: 3.txt
Kolichestvo strok v failen: 5389
****
Elapsed Time: 0.030 sec.
****
CКРИНШОТЫ ОКНА УТИЛИТЫ pview с отображением потоков ПРОГРАММ B,C


ОПИСАНИЕ и РЕЗУЛЬТАТЫ ПРОВЕДЕННОГО ЭКСПЕРИМЕНТА.
Как проводился эксперимент:
1. Были созданы 3 различные программы для обработки заданного количества файлов и подсчета времени выполнения этой обработки.
2. В командной строке поочередно запускались командные файлы (каждый по 5 раз). Например, для гибкого диска:
-10Asss.bat(для 10 файлов)
- 7Asss.bat(для 7 файлов)
- 5Asss.bat(для 5 файлов)
- a:\1.txt(для 1 файла)
Для жесткого диска: для программы А
- 10Csss.bat(для 10 файлов)
- 7Csss.bat(для 7 файлов)
- 5Csss.bat(для 5 файлов)
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 |


