Этап 1. Разработка класса Avto
На первом этапе создадим основной класс Avto потокового объекта, который включает самые необходимые данные:
num – номер обычного объекта, life – признак жизни потока (life= true - поток выполняется, life= false поток завершён), run – признак выполнения потока (run= true - поток выполняется, run= false - поток приостановлен), thread – поток класса Thread.
Включим в класс Avto функции:
Avto () – конструктор класса, ~Finish () – деструктор класса, AvtoFunc () – запустить обычный объект, Suspend () – приостановить выполнение обычного объекта, Resume () – возобновить выполнение обычного объекта.
Диаграмма класса Avto представлена на рис. 5.3.1.1.
Рис. 5.3.1.1. Диаграмма классов Avto–приложения первого этапа разработки
В примере 5.3.1.1 приведена реализация первого этапа на языке C#. В примере 5.3.1.2 приведена реализация первого этапа на языке C++/CLI. В примере 5.3.1.3 приведена реализация первого этапа на языке Java.
Пример 5.3.1.1. Реализация Avtos–приложения первого этапа на языке C#. using System; using System.Threading; using System.Collections;
public class Avto { public int n; public int x, y;//координаты машины public double fi = 0.1; public int dx1, dy1;//приращения машин Thread thread; public bool life;//признак жизни потока public bool run = true;
public Avto(int N, int X, int Y) { n = N; x = X; y = Y;
life = true; //создать и запустить поток thread = new Thread(new ThreadStart(AvtoFunc)); thread.Start();
}
public void Finish()//завершить поток { //Resume(); life = false; }
void AvtoFunc() {
while (life) {
if (run) { Thread.Sleep(50);
//уравнение движения по окр-ти dx1 = (int)(19 * Math.Sin(fi)); dy1 = (int)(19 * Math.Cos(fi)); x += dx1; y += dy1; Console.WriteLine("x= " +x); Console.WriteLine("y= " +y); fi += 0.1;
}
} }
public void Suspend()//приостановить поток { if (run) { run = false;
} }
public void Resume()//возобновить поток { if (!run) { run = true;
} }
}
class Avtos1 {
static void Main() { Avto a = new Avto(1, 50, 50); } }
/* Результат:
*/ Пример 5.3.1.2. Реализация Balls–приложения первого этапа на языке C++/CLI. #include "stdafx.h" using namespace System::Threading; using namespace System;
ref class Avto { public: int n; int x, y;//координаты машины double fi; int dx1, dy1;//приращения машин Thread ^thread; bool life;//признак жизни потока bool run;
Avto(int N, int X, int Y) { run = true; fi=0.1; n = N; x = X; y = Y; life = true; //создать и запустить поток thread = gcnew Thread(gcnew ThreadStart(this,&Avto::AvtoFunc)); thread->Start();
}
void Finish()//завершить поток { //Resume(); life = false; }
void AvtoFunc() {
while (life) {
if (run) { Thread::Sleep(50);
//уравнение движения по окр-ти dx1 = (int)(19 * System::Math::Sin(fi)); dy1 = (int)(19 * System::Math::Cos(fi)); x += dx1; y += dy1; System::Console::WriteLine("x= " +x); System::Console::WriteLine("y= " +y); fi += 0.1;
}
} }
void Suspend()//приостановить поток { if (run) { run = false;
} }
void Resume()//возобновить поток { if (!run) { run = true;
} }
};
static void main() { Avto ^a = gcnew Avto(1, 50, 50); }
/* Результат:
*/
Пример 5.3.1.3. Реализация Avtos–приложения первого этапа
|