Створення WIN32-програм з розділеними паралельно в часі математичними обчисленнями

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2009
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Інші
Група:
СІ-22

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ Національний університет “Львівська політехніка” / Звіт до лабораторної роботи №1 «Створення WIN32-програм з розділеними паралельно в часі математичними обчисленнями» З курсу «Комп’ютерні методи дослідження систем керування» Варіант №2 Мета роботи: Отримати навики роботи в системі візуального об’єктно-орієнтованого програмування C++Builder та освоїти розроблення програм орієнтованих на виконання складних математичних розрахунків з розділенням їх виконання паралельно в часі. Завдання: № п/п Створення потоку засобами Вивід результатів Протабулювати функцію (50 інтервалів)  6 інтерфейсу WIN32 API У файл     Короткі теоретичні відомості: В операційній системі Windows реалізовані два види багатозадачності – процесна та потокова. Процес (Process) – це статичний об’єкт (програма), який не виконується, а попросту «володіє» виділеним йому адресним простором, іншими словами, процес є структурою в пам’яті. Випадок, при якому програма може вирватися із рамок свого процесу та пошкодити чужі ресурси, є практично неможливим. В адресному просторі процесу знаходяться не тільки код та дані, але й потоки (Thread) – об’єкти, що виконується. Саме потокам операційна система виділяє кванти часу, а не процесам. При запуску процесу автоматично запускається потік (який називається головним). При зупинці головного потоку автоматично зупиняється і процес. А так як процес без потоку попросту займає ресурси, то система автоматично знищує його. Поряд із первинним потоком можуть у процесі існувати й додаткові потоки, яким система виділятиме окремі кванти часу. Такий багатопотоковий підхід дає можливість в межах однієї програми здійснювати різні задачі: робота з портами, файлами, математичні обчислення тощо. Наприклад, програма Microsoft Word може одночасно корегувати граматику та друкувати, при цьому здійснюючи ввід даних з клавіатури. Зупинимося на одній деталі. На однопроцесорному комп’ютерові в кожний конкретний момент часу виконується одна задача. Якщо при запуску двох-трьох невеликих програм часова затримка суб’єктно не помітна, то при запуску декількох програм, що потребують колосальних ресурсів, затримка при виконанні програм стає достатньо помітною. На багатопроцесорних системах за кожним процесором може бути закріплений свій потік, і тому на таких системах виконання програм здійснюється дійсно в багатозадачному режимі. На основі програмного пакету C++Builder потокова багатозадачність може бути реалізована: з використанням компоненти типу TThread; засобами інтерфейсу WIN32 API. Список ідентифікаторів, констант, змінни, функцій, методів, використаних у програмі та їх пояснення: #include <fstream.h> - бібліотека потокового вводу-виводу; #include "math.h"- включення математичної бібліотеки; HANDLE Thread1, Thread2 - оголошення дескрипторів потоків DWORD ThreadFunc1(LPVOID lParam) - оголошення потокових функцій Log() – обчислення натурального логарифму; сos() –косинус; Button1Click() – функція-обробник події кнопки 1; Button2Click() – функція-обробник події кнопки 2; Close() – функція завершення роботи програми; і,x,y – змінні; TForm1 *Form1 – глобальний показчик на форму; Текст програми: //--------------------------------------------------------------------------- #include <vcl.h> #include <fstream.h> #include <math.h> #pragma hdrstop //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; HANDLE Thread1, Thread2; DWORD ThreadFunc1(LPVOID IParam); DWORD ThreadFunc2(LPVOID IParam); //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } DWORD ThreadFunc1(LPVOID IParam) { fstream file; file.open("process1.txt",ios_base::out|ios_base::trunc); Form1->Label1->Caption="Protses1 zapyshcheno"; double y; for (double x=1; x<180;x=x+180/50) { y=90*cos(x+log(x/20)); file<<" x="<<x<<" y="<<y<<y<<endl; } file.close(); Form1->Button1->Tag=0; Form1->Label1->Caption="Protses1 zaversheno"; } DWORD ThreadFunc2(LPVOID IParam) { fstream file; file.open("process2.txt",ios_base::out|ios_base::trunc); Form1->Label2->Caption="Process2 zapyshchno"; double y; for(double x=180;x>1;x=x-180/50) {y=30*(log(x)+cos(x/3)); file<<" x="<<x<<" y="<<y<<endl; } file.close(); Form1->Button2->Tag=0; Form1->Label2->Caption="Process2 zaversheno"; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { DWORD count1,Threadld; if(Button1->Tag==0) { Thread1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc1,&count1,0,&Threadld); if(Thread1!=NULL) {Label1->Caption="Process1 zapyshcheno";Button1->Tag=1;} } else { TerminateThread(Thread1,1); Label1->Caption="Process1 prumysovo zaversheno"; Button1->Tag=0; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { DWORD count2,Threadld; if(Button2->Tag==0) { Thread2=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc2,&count2,0,&Threadld); if(Thread2!=NULL) {Label2->Caption="Process2 zapyshcheno";Button2->Tag=1;} } else { TerminateThread(Thread2,2); Label2->Caption="Process2 prumysovo zaversheno"; Button2->Tag=0; } } //--------------------------------------------------------------------------- Результати роботи програми: x=1 y=-37.1036-37.1036 x=4 y=-65.7887-65.7887 x=7 y=85.055785.0557 x=10 y=-89.3749-89.3749 x=13 y=89.999689.9996 x=16 y=-89.7865-89.7865 x=19 y=89.55889.558 x=22 y=-89.5122-89.5122 x=25 y=89.632589.6325 x=28 y=-89.8263-89.8263 x=31 y=89.977689.9776 x=34 y=-89.9675-89.9675 x=37 y=89.683289.6832 x=40 y=-89.022-89.022 x=43 y=87.892687.8926 x=46 y=-86.2167-86.2167 x=49 y=83.929283.9292 x=52 y=-80.9789-80.9789 x=55 y=77.329277.3292 x=58 y=-72.9577-72.9577 x=61 y=67.857367.8573 x=64 y=-62.0356-62.0356 x=67 y=55.515455.5154 x=70 y=-48.3339-48.3339 x=73 y=40.54340.543 x=76 y=-32.2079-32.2079 x=79 y=23.40723.407 x=82 y=-14.2304-14.2304 x=85 y=4.778644.77864 x=88 y=4.838414.83841 x=91 y=-14.5035-14.5035 x=94 y=24.093724.0937 x=97 y=-33.4823-33.4823 x=100 y=42.540742.5407 x=103 y=-51.141-51.141 x=106 y=59.157659.1576 x=109 y=-66.4699-66.4699 x=112 y=72.96472.964 x=115 y=-78.5351-78.5351 x=118 y=83.089483.0894 x=121 y=-86.5459-86.5459 x=124 y=88.838388.8383 x=127 y=-89.9162-89.9162 x=130 y=89.746489.7464 x=133 y=-88.314-88.314 x=136 y=85.62385.623 x=139 y=-81.6967-81.6967 x=142 y=76.577876.5778 x=145 y=-70.3281-70.3281 x=148 y=63.027763.0277 x=151 y=-54.7746-54.7746 x=154 y=45.68345.683 x=157 y=-35.8818-35.8818 x=160 y=25.513125.5131 x=163 y=-14.7298-14.7298 x=166 y=3.693333.69333 x=169 y=7.428537.42853 x=172 y=-18.4647-18.4647 x=175 y=29.243129.2431 x=178 y=-39.5942-39.5942
Антиботан аватар за замовчуванням

30.11.2012 00:11-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!