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

If (full) return false;

if (((allLoad) < PartLoad))

{

// Недостаточно груза в складе для загрузки грузовика

WarehouseEventArgs wA= new WarehouseEventArgs

(left, false);

bW.notifyObs (wA); // Уведомить обозревателя

return false;

>

// Загрузить грузовик и уменьшить груз склада

partLoad= -PartLoad; // Определить выгрузку

change ();

return true; >

// Поместить или получить груз

public void change ( )

{

// Выполнить операцию только с одним грузовиком

synchronized (thls) // Критическая секция

{

allLoad += partLoad;

try

{

Thread.sleep (timePeriod);

>

catch (InterruptedExceptlon e) { >

> repaint ( ) ;

>

// Перерисовать размещение груза в складе

public void palnt (Graphics g)

{

g.setColor (Color.yellow);

g.drawRect (0, 0, W, H);

g.flllRect ( 0, 100 - allLoad, W, H);

g.setColor (Color,black);

g.drawStrlng (Integer.toString (allLoad), 5, 30);

}

>

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

//C++/CLIFile ccWarehouse.dll KnaccWarehouse

#include "stdafx.h"

#using <System.Drawing.dll>

#uslng <System.Windows.Forms.dll>

using namespace System;

using namespace System::Windows:;Forms;

using namespace System::Drawing;

using namespace System::Threading;

using namespace System:;Coiiections;

namespace ccWarehouse

{

// Класс данных события evFromWarehouse

public refclassWarehouseEventArgs: EventArgs

{

private:

bool left; // Признак идентификации склада

bool full; // Признак заполненности склада

public:

WarehouseEventArgs (bool left, bool full)

{

this->left= left; this->full= full;

>

// Свойство заполнения склада

property bool Full

{

bool get ( ) {return full;>

// Свойство идентификации склада

property bool Left

{

bool get ( ) {return left;>

>

>;

//' ДсЛсГа! СОиЬииЯ О ПсрспОЛНеНИИ И Ori'yViCLuCIiy'iVi склада

public delegate vold DelEvFromWarehouse (Object ^sender,

WarehouseEventArgs ^args);

// Класс склада

public ref class Warehouse; UserControl

{

bool left; // Признак идентификации склада

lnt allLoad; II Текущий размер груза в складе

lnt PartLoad; // Размер груза грузовика

lnt partLoad; Ц Выгружаемая или загружаемая порция

lnt tlmePeriod; // Время выгрузки или загрузки груза

public:

event DelEvFromWarehouse ^evFromWarehouse; // Ссылка

// на объект события о переполнении и опустошении склада

// Конструктор

Warehouse (bool left, bool full)

{

allLoad= 100; PartLoad= 10; tlmePeriod= 100;

this->left= left;

lf(!full)allLoad=0; // Складпуст

>

// Поместить груз в склад

bool Put (bool full )

{

lf(!full) return false; // Пустой грузовик не выгружать

if(allLoad >= 100) return false; // Склад заполнен

// Выгрузить грузовик и увеличить груз склада

partLoad= PartLoad; // Определить выгрузку

Change (); // Выгрузить

return true;

// Получить груз из склада

bool Get (bool full)

<

If(full) return false; // Полный грузовик не загружать

!f((allLoad < PartLoad) && (evFromWarehouse 1= null))

{

|| Недостаточно груза в складе для загрузки грузовика

WarehouseEventArgs ^wH= gcnew WarehouseEventArgs

(left, false);

evFromWarehouse (thls, wH); // Сгенерировать событие

return false;

>

// Загрузить грузовик и уменьшить груз склада

partLoad= -PartLoad; // Определить выгрузку

Change (); // Выгрузить

return true;

>

// Поместить или получить груз порциями и с временной задержкой

protected: