Реферат по предмету "Информатика"


Разработка многопоточных Windows-приложений в среде Borland C Builder

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ


ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ


Кафедра АСУ


Отчёт


к индивидуальному домашнему заданию


по ТП


на тему:


«Разработка многопоточных


W


indows-приложений



в среде


Borland


C


++


Builder


»



Вариант №7


Выполнил студент группы ИУС-04б


Ващилко Валентин


Проверили Землянская С.Ю.


Петров А.В.


Донецк 2007


Цель работы:
Изучение способов создания и управления потоками в программах, разрабатываемых в среде BorlandC++ Builder. Изучение и использование методов взаимодействия потоков и визуальных компонентов библиотеки VCL.


Методические указания:


С использованием среды визуального программирования BorlandC++ Builder разработать и отладить многопоточное приложение, в котором необходимо предусмотреть следующее:


а) создать 3 вторичных объекта-потока, производных от класса TThread (1-й поток должен быть в запущенном состоянии, 2-й и 3-й – в приостановленном состоянии). В каждом из потоков описать функции вывода информации на соответствующие формы. Вызов этих функций будет производиться из метода Execute() соответствующего потока в бесконечном цикле, с помощью функции Synchronize() с периодичностью (задержкой) 0,1 сек;


б) разработать 3 формы (главную форму приложения и 2 формы) для взаимодействия с указанными потоками;


в) главная форма приложения должна быть размещена в центре экрана и состоять из 4-х частей: в верхней части должна быть надпись с информацией о данной работе (дисциплина, № работы, группа, ФИО студента), ниже постоянно выводится динамически изменяющаяся текстовая (числовая) информация или графическая фигура, выполняемые в 1-м вторичном потоке. В нижней половине формы должны располагаться 2 панели для управления 2-м и 3-м созданными потоками. Внизу формы помещается кнопка "Выход".


г) на каждой панели вверху помещается название потока, а ниже размещаются компоненты для отображения состояния и управления соответствующим потоком. Информация о потоке (запущен, приостановлен, завершен) выводится с помощью компонентов Label. Управление потоком производится с помощью кнопок с названиями "Запустить", "Приостановить", "Завершить". Изменение приоритета потока может производиться с помощью компонентов типа ComboBox, ListBox, RadioGroup по выбору студента.


д) при запуске приложения должна появиться главная форма, в верхней половине которой должны отображаться действия, выполняемые 1-м вторичным потоком согласно варианту задания. Два других потока должны находиться в приостановленном состоянии, о чем должны говорить надписи на панелях. При нажатии на любой панели кнопки "Запустить" должна появиться форма, на которой будет выводится динамически изменяющаяся текстовая (числовая) информация или графическая фигура, выполняемые в соответствующем потоке. При нажатии кнопки "Приостановить" работа соответствующего потока временно прекращается. При нажатии кнопки "Завершить" соответствующая форма закрывается, действие потока останавливается (без уничтожения объекта, для возможности повторного запуска потока).















Вар-та


Действия, выполняемые в потоках и отображаемые на формах
Поток 1 Поток 2 Поток 3
7 Компонент ScrollBar на форме циклически показывает плавное движение ползунка. Последовательность цифр, выведенная с помощью компонента Label циклически сдвигается справо-налево, образуя "бегущие числа". Графическая фигура одного вида (компонент Shape) на форме изменяет свои размеры от min до max, а потом наоборот.


Unit1.cpp


//---------------------------------------------------------------------------


#include <vcl.h>


#pragma hdrstop


#include "Unit1.h"


#include "Unit2.h"


#include "Unit3.h"


#include "T2.h"


#include "T1.h"


#include "T3.h"


//---------------------------------------------------------------------------


#pragma package(smart_init)


#pragma resource "*.dfm"


TForm1 *Form1;


T1 *Thread1=newT1(false); // Поток 1 создан и запущен


T2 *Thread2=newT2(true); // Поток 2 создан и не запущен


T3 *Thread3=newT3(true); // Поток 3 создан и не запущен


//---------------------------------------------------------------------------


__fastcall TForm1::TForm1(TComponent* Owner)


: TForm(Owner)


{


}


//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)


{


Label9->Caption="Запущен";


Form2->Show();


Thread2->Resume();


}


//---------------------------------------------------------------------------


void __fastcall TForm1::Button2Click(TObject *Sender)


{


Label9->Caption="Приостановлен";


Thread2->Suspend();


}


//---------------------------------------------------------------------------


void __fastcall TForm1::Button3Click(TObject *Sender)


{


Label9->Caption="Завершён";


Thread2->Terminate();


Form2->Close();


}


//---------------------------------------------------------------------------


void __fastcall TForm1::RadioGroup1Click(TObject *Sender)


{


switch (RadioGroup1->ItemIndex)


{


case 0: Thread2->Priority=tpLowest;


break;


case 1: Thread2->Priority=tpNormal;


break;


case 2: Thread2->Priority=tpHighest;


break;


}


}


//---------------------------------------------------------------------------


void __fastcall TForm1::ComboBox1Change(TObject *Sender)


{


switch (ComboBox1->ItemIndex)


{


case 0: Thread3->Priority=tpLowest;


break;


case 1: Thread3->Priority=tpNormal;


break;


case 2: Thread3->Priority=tpHighest;


break;


}


}


//---------------------------------------------------------------------------


void __fastcall TForm1::Button4Click(TObject *Sender)


{


Label10->Caption="Запущен";


Form3->Show();


Thread3->Resume();


}


//---------------------------------------------------------------------------


void __fastcall TForm1::Button5Click(TObject *Sender)


{


Label10->Caption="Приостановлен";


Thread3->Suspend();


}


//---------------------------------------------------------------------------


void __fastcall TForm1::Button6Click(TObject *Sender)


{


Label10->Caption="Завершён";


Thread3->Terminate();


Form3->Close();


}


//---------------------------------------------------------------------------


void __fastcall TForm1::Button7Click(TObject *Sender)


{


exit(1);


}


//---------------------------------------------------------------------------


Unit2.cpp


//---------------------------------------------------------------------------


#include <vcl.h>


#pragma hdrstop


#include "T2.h"


#include "Unit2.h"


//---------------------------------------------------------------------------


#pragma package(smart_init)


#pragma resource "*.dfm"


TForm2 *Form2;


//---------------------------------------------------------------------------


__fastcall TForm2::TForm2(TComponent* Owner)


: TForm(Owner)


{


}


//---------------------------------------------------------------------------


Unit3.cpp


//---------------------------------------------------------------------------


#include <vcl.h>


#pragma hdrstop


#include "Unit3.h"


#include "T3.h"


//---------------------------------------------------------------------------


#pragma package(smart_init)


#pragma resource "*.dfm"


TForm3 *Form3;


//---------------------------------------------------------------------------


__fastcall TForm3::TForm3(TComponent* Owner)


: TForm(Owner)


{


}


//---------------------------------------------------------------------------


T1.cpp


//---------------------------------------------------------------------------


#include <vcl.h>


#pragma hdrstop


#include "Unit1.h"


#include "T1.h"


#pragma package(smart_init)


//---------------------------------------------------------------------------


__fastcall T1::T1(bool CreateSuspended)


: TThread(CreateSuspended)


{


}


//---------------------------------------------------------------------------


void __fastcall T1::OutOnForm1()


{ static int i=2;


Form1->ScrollBar1->Position+=i;


if (Form1->ScrollBar1->Position == 100)


{Form1->ScrollBar1->Position=0;}


}


//---------------------------------------------------------------------------


void __fastcall T1::Execute()


{


for (;;)


{


Synchronize(OutOnForm1);


Sleep(100);


}


}


//---------------------------------------------------------------------------


T2.cpp


//---------------------------------------------------------------------------


#include <vcl.h>


#pragma hdrstop


#include "Unit1.h"


#include "T2.h"


#include "Unit2.h"


#pragma package(smart_init)


//---------------------------------------------------------------------------


__fastcall T2::T2(bool CreateSuspended)


: TThread(CreateSuspended)


{


}


//---------------------------------------------------------------------------


void __fastcall T2::OutOnForm2()


{ static int i=10;


Form2->Label1->Left-=i ;


if (Form2->Label1->Left < -160)


{Form2->Label1->Left=370;}


}


//---------------------------------------------------------------------------


void __fastcall T2::Execute()


{


for (;;)


{


Synchronize(OutOnForm2);


Sleep(150);


}


}


//---------------------------------------------------------------------------


T3.cpp


//---------------------------------------------------------------------------


#include <vcl.h>


#pragma hdrstop


#include "T3.h"


#include "Unit1.h"


#include "Unit3.h"


#pragma package(smart_init)


//---------------------------------------------------------------------------


__fastcall T3::T3(bool CreateSuspended)


: TThread(CreateSuspended)


{


}


//---------------------------------------------------------------------------


void __fastcall T3::OutOnForm3()


{ static int i=5;


static int k;


static int f=0;


if (f==0)


{


for (k=40;k<=100;k+=5);


{


Form3->Shape1->Width+=i;


Form3->Shape1->Height+=i;


if (Form3->Shape1->Width==100) {f=1;} ;


};


};


if(f==1)


{


for (k=100;k>=40;k-=5);


{


Form3->Shape1->Width-=i;


Form3->Shape1->Height-=i;


if (Form3->Shape1->Width==40) {f=0;} ;


};


};


}


//---------------------------------------------------------------------------


void __fastcall T3::Execute()


{


for (;;)


{


Synchronize(OutOnForm3);


Sleep(150);


}


}


//---------------------------------------------------------------------------



Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.