Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев_С++_CLI_C#_Java_J#.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
5 Мб
Скачать
☆

Importjava.Awt.Event.*;

// Класс ContrlRegion

public class ContrlRegion extends Panel

<

/ / Проконтролировать грузовик

public void Work ( )

{

try

{

Thread.sleep (1000);

>

catch (InterruptedException e) { >

>

>

///////////////

// C++/CLI File ccContrlRegion

#include "stdafx.h"

#using <System.Wlndows.Forms,dll>

using namespace System;

using namespace System::Windows::Forms;

using namespace System::Threadlng;

namespace ccContrlReglonDII

{

|| Компонент ContrlRegion

public refclass ContrlRegion: UserControl

{

public:

Void Work ( ) // Выполнить работу

{

Thread::Sleep (2000);

>

>;

>

Наиболее сложным классом нашей программы является класс Lorry, диа-

грамма классов которого изображена на рис. 11.4.2.2. С каждым объектом

класса Lorry связан уникальный номер number, присваиваемый при создании

этого объекта. Объект класса Lorry представлен в прикладном окне в виде

круга с координатами в точке p, перемещающегося по горизонтали с прира-

щением dX в каждом цикле потоковой функции Moving() собственного пото-

ка thr объекта этого класса.

При создании объекта класса Lorry его конструктор присваивает требуемые

при выполнении потоковой функции Moving() значения признака направле-

ния перемещения груза leftRight, значения ссылок leftWH и rightWH к объ-

ектам складов, значение ссылки region к объекту зоны контроля.

<<.ysfi. >> ^>| •Warehouse I

« у§£ » ^r^^———:—|

>hCwrtriRwiffn I

• Ц +Thread |

<<-BW.>>..-..?>| *Mnnttnr I

Рис. 11.4.2.2. Диаграмма классов компонента Lorry

Класс Lorry размещён в библиотеке csLorry с пространством имён csLortyDIl.

* l o r r y

-leftWH: Warehouse

-rightWH: Warehouse

-region: ContrlRegion

-thr: Thread

-leftRight: bool

-number int

-p: Point

-dX:int

-inContrl: bool

-life: bool

-run: bool

-timePeriod: int

+Number property

+Point: property

+LeftRight:propertv

+LorryQ

+Run()

+Stop()

+Finish()

-Movinon г

Класс Lorry представлен в примере 11.4.2.2. Он требует подключения

библиотек csWarehouse и csContrlRegion, содержащих классы Warehouse и

ContrlRegion.

После создания объекта класса Lorry, при котором создаётся и объект thr

потока с потоковой функцией Moving(), его функция Start() должна запустить

поток. Функции Stop() и Run() приостанавливают или возобновляют выпол-

нение потока, а функция Finish() его завершает.

Цикл while продвигает координату x объекта на dX через период време-

ни timePeriod, обеспечивая при достижении складов выгрузку или погрузку

груза посредством интерфейсных функций Get() и Put() класса Warehouse.

Для фиксации вхождения объекта грузовика в зону контроля region ис-

пользуется признак inContrl. При вхождении в зону region осуществляется

захват разделяемого ресурса, а при выходе - его освобождение. Захват об-

ласти контроля осуществляет статическая функция Enter() класса Monitor, а

освобождение - статическая функция Exit().

Пример11.4.2.2. ^iaccLorry.

///////////////

// C# File csLorry класс Lorry

using System;

using System.Threading;

using System.Drawing;

using System.Wlndows.Forms;

using csWarehouseDI!;

using csContrlRegionDII;

namespace csLorryDII

{

// Класс грузовика

public class Lorry

{