Этап 2. Разработка события ev и уведомления
Включим в класс Avto обычного объекта событие ev и уведомление, сигнализирующее об очередном цикле выполнения потока. Это событие и уведомление обрабатывается функцией HandlerEv или update() класса Avtos, что будет использовано при перерисовке автомобилей в области клиента прикладного окна на третьем этапе. На рис. 5.3.2.1 и в примерах 5.3.2.1 и 5.3.2.2 и 5.3.2.3 представлены диаграмма классов второго этапа и программы, реализующие её.
Рис 5.3.2.1. Диаграмма классов Avtos–приложения второго этапа
Реализация второго этапа разработки Avtos–приложения на языке C# дана в примере 5.3.2.1. Реализация второго этапа разработки Avtos–приложения на языке C++/CLI дана в примере 5.3.2.2.
Реализация второго этапа разработки Avtos–приложенияна языке Java дана в примере 5.3.2.3.
Пример 5.3.2.1. Реализация второго этапа разработки Avtos–приложения на языке C#. //////////////////// // С# File Avtos2.cs // Файл Avtos2.cs полностью включает файл Avtos1.cs, дополнив // его объявлением события ev в классе Avto и функцией HandlerEvSpecial // класса Avtos, обеспечивающей обработку этого события. // Изменения файла Avtos.cs выделены жирным шрифтом. ... //------------------------------------- delegate void delEv ();// Объявление типа delEv делегата события ev class Avto { public event delEv evSpecial;;// Объявление события ev ... //--------------- public Avto(int N, int X, int Y) // Выполнить поток { //--------------- void AvtoFunc() {
while (life) {
if (run) { Thread.Sleep(50); if (ev!= null) evSpecial (); //--------------- } }; //-------------------------------------
class Avtos2 // Класс потоковых объектов {
public void HandlerEvSpecial () // Обработчик события ev { Console.WriteLine (" HandlerEv"); }
public Avtos () // Конструктор { Avto a = new Avto(1, 50, 50)
a.evSpecial+= new delEv(HandlerEvSpecial);// Добавить }
... static void Main() { Avto a = new Avto(1, 50, 50); } }
Пример 5.3.2.2. Реализация второго этапа разработки Avtos–приложения на языке C++/CLI. #include "stdafx.h" using namespace System::Threading; using namespace System;
... //------------------------------------- delegate void delEv ();// Объявление типа delEv делегата события ev ref class Avto { Public: event delEv evSpecial;;// Объявление события ev ... //--------------- Avto(int N, int X, int Y) // Выполнить поток { //--------------- void AvtoFunc() {
while (life) {
if (run) { Thread::Sleep(50);
|