Автор работы: Пользователь скрыл имя, 04 Сентября 2009 в 05:27, Не определен
Отчёт к индивидуальному домашнему заданию
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ДОНЕЦКИЙ
НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Отчёт
к индивидуальному домашнему заданию
по ТП
на тему:
«Разработка многопоточных Windows-приложений
в
среде Borland C++ Builder
»
Вариант
№7
Выполнил студент группы ИУС-04б
Ващилко
Валентин
Петров
А.В.
Донецк 2007
Цель работы: Изучение способов создания и управления потоками в программах, разрабатываемых в среде Borland C++ Builder. Изучение и использование методов взаимодействия потоков и визуальных компонентов библиотеки VCL.
С использованием среды визуального программирования Borland C++ 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=new T1(false); // Поток 1 создан и запущен
T2 *Thread2=new T2(true); // Поток 2 создан и не запущен
T3 *Thread3=new T3(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(
{
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(
{
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+=
if (Form1->ScrollBar1->Position == 100)
{Form1->ScrollBar1->Position=
}
//----------------------------
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)
Информация о работе Разработка многопоточных Windows-приложений в среде Borland C++ Builder