МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра АСУ
Отчёт
к индивидуальному домашнему заданию
по ТП
на тему:
«Разработка многопоточных
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-м созданными потоками. Внизу формы помещается кнопка "Выход".
Забиваем Сайты В ТОП КУВАЛДОЙ - Уникальные возможности от SeoHammer
Каждая ссылка анализируется по трем пакетам оценки: SEO, Трафик и SMM.
SeoHammer делает продвижение сайта прозрачным и простым занятием.
Ссылки, вечные ссылки, статьи, упоминания, пресс-релизы - используйте по максимуму потенциал SeoHammer для продвижения вашего сайта.
Что умеет делать SeoHammer
— Продвижение в один клик, интеллектуальный подбор запросов, покупка самых лучших ссылок с высокой степенью качества у лучших бирж ссылок.
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз,
а первые результаты появляются уже в течение первых 7 дней.
Зарегистрироваться и Начать продвижение
г) на каждой панели вверху помещается название потока, а ниже размещаются компоненты для отображения состояния и управления соответствующим потоком. Информация о потоке (запущен, приостановлен, завершен) выводится с помощью компонентов Label. Управление потоком производится с помощью кнопок с названиями "Запустить", "Приостановить", "Завершить". Изменение приоритета потока может производиться с помощью компонентов типа ComboBox, ListBox, RadioGroup по выбору студента.
д) при запуске приложения должна появиться главная форма, в верхней половине которой должны отображаться действия, выполняемые 1-м вторичным потоком согласно варианту задания. Два других потока должны находиться в приостановленном состоянии, о чем должны говорить надписи на панелях. При нажатии на любой панели кнопки "Запустить" должна появиться форма, на которой будет выводится динамически изменяющаяся текстовая (числовая) информация или графическая фигура, выполняемые в соответствующем потоке. При нажатии кнопки "Приостановить" работа соответствующего потока временно прекращается. При нажатии кнопки "Завершить" соответствующая форма закрывается, действие потока останавливается (без уничтожения объекта, для возможности повторного запуска потока).
Сервис онлайн-записи на собственном Telegram-боте
Попробуйте сервис онлайн-записи VisitTime на основе вашего собственного Telegram-бота:
— Разгрузит мастера, специалиста или компанию;
— Позволит гибко управлять расписанием и загрузкой;
— Разошлет оповещения о новых услугах или акциях;
— Позволит принять оплату на карту/кошелек/счет;
— Позволит записываться на групповые и персональные посещения;
— Поможет получить от клиента отзывы о визите к вам;
— Включает в себя сервис чаевых.
Для новых пользователей первый месяц бесплатно.
Зарегистрироваться в сервисе
№
Вар-та
|
Действия, выполняемые в потоках и отображаемые на формах |
Поток 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);
}
}
//---------------------------------------------------------------------------
|