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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Контрольные рефераты

Учебная работа. Реферат: Разработка многопоточных 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 циклически двигается справо-налево, образуя «бегущие числа».
Графическая фигура 1-го вида (компонент 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);

}

}

//—————————————————————————

]]>