Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив2 / курсовая docx525 / Kursovaya_rabota_Final.docx
Скачиваний:
12
Добавлен:
07.08.2013
Размер:
101.21 Кб
Скачать

Программа 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 целесообразней использовать многопоточную программу с высоким приоритетом потоков. Т.к. она имеет относительно быстрейший результат выполнения обработки файлов с учетом задания

ЛИТЕРАТУРА

  1. Конспект лекций «Операционные системы» Варфоломеев В.А.

  2. Фролов А.В., Фролов Г.В. Программирование для Windows NT. — М.: ДИАЛОГ-МИФИ, 1996.— 272 с.— (Библиотека системного программиста; т. 26)

  3. Киммел П. Borland C++ 5, — Спб.: BHV-Санкт-Петербург, 1999

  4. Верма Р. Справочник по функциям Win 32 API, М:, «Горячая линия – Телеком

  5. Румянцев П.В. Азбука программирования Win32 API, «Радио и Связь», 1999

  6. Google

15

Соседние файлы в папке курсовая docx525