Реферат: Разработка многопоточных Windows-приложений в среде Borland C Builder
Название: Разработка многопоточных 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-м вторичным потоком согласно варианту задания. Два других потока должны находиться в приостановленном состоянии, о чем должны говорить надписи на панелях. При нажатии на любой панели кнопки "Запустить" должна появиться форма, на которой будет выводится динамически изменяющаяся текстовая (числовая) информация или графическая фигура, выполняемые в соответствующем потоке. При нажатии кнопки "Приостановить" работа соответствующего потока временно прекращается. При нажатии кнопки "Завершить" соответствующая форма закрывается, действие потока останавливается (без уничтожения объекта, для возможности повторного запуска потока).
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); } } //--------------------------------------------------------------------------- |