Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Synchronized(sB)

Приложение 3. Текст модифицированной программы на языке Java

Приложение 3. Текст программы на языке Java

Приложение 1. Диаграмма классов разработанной программы

Список используемой литературы

Описание проблем, возникших при разработке программной системы.

При отталкивании каждого шара от границ окна появляется в верхнем левом углу окна желтый шар и исчезает через 2000 мс.

*/

 

 

Поэтапная разработка программы позволила быстро разработать её и отладить. Проблем не было.

 

 

1. Байдачный С.С..NET Framework. Секреты создания Windows-приложений. – М.: СОЛОН-Пресс, 2004. – 496 с.: ил.

2. Гербердт Шилдт. C#: учебный курс. – СПб.: Питер; К.: Издательская группа BHV, 2003. – 512 c.: ил.

3. Джесс Либерти. Программирование на C#: 2-е издание. – СПб.: Символ-Плюс, 2003. – 688 c.: ил.

4. Медведев В.И. Особенности объектно-ориентированного программирования на C++/CLI, C# и Java. 3-е изд., испр. и доп. – Казань: РИЦ «Школа», 2011. – 430 c.: ил

5. Орлов А.Технология разработки программного обеспечения. Учебник. – СПб.: Питер, 2002. – 464 с.

6. Петцольд Ч. Программирование для Microsoft Windows на C#. В 2-х томах / Пер. с англ. – М.: Издательско-торговый дом “Русская Редакция”, 2002. – 576 + 624 с.: ил.

7. П. Наутон, Г. Шилдт. Java 2. Наиболее полное руководство в подлиннике.– СПб.: БХВ-Петербург, 2000. – 1072 с.: ил.

8. Рамбо Дж., Якобсон А., Буч Г. UML: специальный справочник. – СПб.: Питер, 2002. – 656 c.

 

 

 

 

9. Приложение 2. Текст программы на языке C#

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

// C# File BallsCs.cpp

using System;

using System.Drawing;

using System.Windows.Forms;

using System.Threading;

 

delegate void delEv (); // Делегат события

class Ball // Класс обычного объекта

{

public event delEv ev; // Объявление события

public event delEv evSpecial; // Объявление специального события

public int x, y; // Координаты шара

public int w, h; // Ширина и высота области клиента

public int dx, dy; // Приращения координат шара

Thread thread; // Поток

bool run; // Признак выполнения потока

bool life; // Признак существования потока

 

public Ball (int X, int Y, int Dx, int Dy) // Конструктор

{

life= false; run= false; w= 100; h= 100;

x= X; y= Y; dx= Dx; dy= Dy;

}

 

//---------------

public void Start () // Стартовать

{

if (!run) // Если поток не выполнялся, то

{

run= true; // пусть выполняется и

life= true; // пусть живёт.

thread= new Thread (new ThreadStart (BallFunc));

thread.Start ();// Стартовать поток

}

}

 

//---------------

public void Suspend () // Приостановить

{

if (run) // Если поток выполняется, то

{

run= false; // прекратить выполнение.

thread.Suspend (); // Приостановить

}

}

//---------------

public void Resume () // Возобновить

{

if (!run) // Если поток приостановлен, то

{

run= true; // пусть выполняется

thread.Resume (); // Возобновить

}

}

 

//---------------

public void Finish () // Завершить

{

life= false;

thread.Abort ();

thread.Join ();

}

 

//---------------

void BallFunc () // Выполнить поток

{

while (life) // Пока существует, выполнить

{

x += dx; y += dy;

if (x>w || x<0)

{

dx= -dx;

if (evSpecial!= null)

{

evSpecial (); // Генерировать событие

}

}

if (y>h || y<0)

{

dy= -dy;

if (evSpecial!= null)

{

evSpecial (); // Генерировать событие

}

}

if (ev!= null)

{

ev (); // Генерировать событие

}

Thread.Sleep (100);

}

}

}

 

class SpecialBall // Класс специального объекта

{

public int x, y; // Координаты шара

public int d=1; // Ширина пера

Thread thread; // Поток

bool run; // Признак выполнения потока

 

public SpecialBall (int X, int Y) // Конструктор

{

run= false;

x= X; y= Y;

}

 

//---------------

void Start () // Стартовать

{

if (!run) // Если поток не выполнялся, то

{

run= true; // пусть выполняется и

d= 5; // утолщить кольцо

thread= new Thread (new ThreadStart (BallFunc));

thread.Start ();// Стартовать поток

}

}

 

//---------------

public void HandlerEvSpecial () // Обработать событие

{

Start ();

}

 

//---------------

void BallFunc () // Выполнить поток

{

Thread.Sleep (2000);

d= 1;

run= false;

}

}

//-------------------------------------

class Balls: Form // Класс объектов

{

public Ball [] pBall; // Массив обычных объектов

public SpecialBall pSpecialBall;

bool run; // Признак выполнения обычных объектов

Color col; // Цвет шаров

public Balls () // Конструктор

{

run= true;

col= System.Drawing.Color.FromArgb (0, 0, 255);

pSpecialBall= new SpecialBall (30, 30);

pBall= new Ball [2];

for (int i= 0; i < 2; i++)

{

pBall[i]=new Ball (i*3+10, 1*3+15, i*3+5, i*3+5);

pBall[i].ev += new delEv (HandlerEv);

pBall[i].evSpecial += new delEv

(pSpecialBall.HandlerEvSpecial);

}

Text= "Balls"; // Заголовок прикладного окна

Start (); // Стартовать обычные объекты

}

 

//---------------

public void Start () // Стартовать

{

for (int i=0; i < 2; i++)

pBall[i]. Start ();

}

 

//---------------

public void Suspend () // Приостановить

{

if (run) // Если обычные объекты выполнялись, то

{

run= false; // прекратить выполнение.

for (int i=0; i < 2; i++)

pBall[i].Suspend (); // Приостановить

}

}

 

//---------------

public void Resume () // Возобновить

{

if (!run) // Если обычные объекты приостановлены, то

{

run= true; // продолжить выполнение.

for(int i= 0; i < 2; i++)

pBall[i].Resume (); // Возобновить

}

}

 

//---------------

public void SetColor (Color Col) // Установить цвет

{

col= Col;

Invalidate ();

}

 

//---------------

protected override void OnPaint (PaintEventArgs arg) // Перерисовать

{

for (int i= 0; i < 2; i++)

{

arg.Graphics.DrawEllipse (new Pen (col),

pBall[i].x, pBall[i].y, 20, 20);

pBall[i].w= Width;

pBall[i].h= Height;

}

arg.Graphics.DrawEllipse (new Pen (Color.Yellow, pSpecialBall. d),

pSpecialBall.x, pSpecialBall.y, 20, 20);

}

 

//---------------

void HandlerEv () // Обработать событие

{

Invalidate ();

}

}

 

//----------

class User: Balls // Класс пользователя шаров

{

private bool run; // Признак перемещения шаров

Form pChildForm; // Дочерняя форма (окно)

Color col; // Цвет шаров

Button pBut; // Кнопка

ListBox pListBox; // Список

 

public User () // Конструктор

{

run= true;

//---------------

pBut= new Button(); // Создать кнопку

pBut.Location = new Point (32, 24); // Разместить кнопку

pBut.Name = "pBut"; // Дать имя кнопке

// Задать размер кнопки в области клиента дочерней формы

pBut.Size = new System.Drawing.Size (32, 24);

pBut.Text = "OK"; // Поместить текст в кнопку

// Подписать обработчик EventHandler кнопки на событие Click

pBut.Click += new EventHandler (OnBut);

//---------------

pListBox= new ListBox (); // Создать список

pListBox.Items.Add ("red"); // Добавить red

pListBox.Items.Add ("green"); // Добавить green

pListBox.Items.Add ("blue"); // Добавить blue

pListBox.Location = new Point (104, 24); // Разместить список

pListBox.Name = "listBox"; // Дать имя списку

// Задать размер списка в области клиента дочерней формы

pListBox.Size = new System.Drawing.Size (56, 17);

// Подписать обработчик списка на событие

// SelectedIndexChanged

pListBox.SelectedIndexChanged += new System.EventHandler

(SelectedItem);

// Задать размер области клиента прикладного окна

ClientSize = new System.Drawing.Size (200, 150);

//---------------

pChildForm= new Form (); // Создать дочернее окно (форму)

pChildForm.Location= new Point (250, 10);// и разместить его.

pChildForm.Size= new Size (250, 250); // Определить размер

pChildForm.Text= "User"; // Задать заголовок дочернего окна

pChildForm.Show (); // Показать дочернее окно

pChildForm.Controls.Add (pBut); // Добавить кнопку

pChildForm.Controls.Add (pListBox); // и список.

pChildForm.ClientSize = new System.Drawing.Size (200, 62);

}

 

//---------------

void OnBut (object obj, EventArgs arg) // Обработать кнопку

{

if (run) // Если шары перемещаются, то

{

run= false; // пусть перестанут перемещаться.

Suspend (); // Приостановить

}

else // Иначе,

if(!run) // если шары неподвижны, то

{

run= true; // пусть перемещаются.

Resume (); // Возобновить

}

}

 

//---------------

void SelectedItem (object obj, EventArgs arg) // Выбрать из списка

{

if(pListBox.GetSelected (0))

col= Color.Red;

if(pListBox.GetSelected (1))

col= Color.Green;

if(pListBox.GetSelected (2))

col=Color.Blue;

SetColor (col);

}

 

//-------------------------

static void Main()

{

User user= new User();

Application.Run(user); // Выполнить приложение

for (int i= 0; i < 2; i++) // Завершить и удалить потоки

user.pBall[i].Finish ();

}

}

 

 

package BallsCj7;

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

//C# File BallsCj7

import java.util.*;

import java.awt.*;

import java.awt.event.*;

 

class Obs

{

private int num, n;

private boolean special;//

 

public Obs (int num, int n, boolean special)//

 

{this.num= num; this.n= n;this.special= special;}//

 

int getNumber(){return num;}

 

int getN(){return n;}

 

boolean getSpecial(){return special;}//

}

class Ball extends Observable implements Runnable // Класс обычного объекта

{

int num;

Thread thread;

boolean run;

boolean waiting= false;

boolean life;

public int x, y;

public int w, h;

public int dx, dy;

 

public Ball (int Num, int X, int Y, int Dx, int Dy)// Конструктор

{

num= Num; life= false; run= false;

w= 100; h= 100;

x= X; y= Y; dx= Dx; dy= Dy;

Start ();

}

 

public void Start () // Стартовать

{

if (!run)

{

run= true;

life= true;

thread= new Thread (this);

thread.start ();

}

}

//---------------

synchronized public void Suspend () // Приостановить

{

if (run)

{

run= false;

waiting=true;

}

}

//---------------

synchronized public void Resume () // Возобновить

{

if (!run)

{

run= true;

waiting=false;

notify();

}

}

//---------------

public void run () // Выполнить поток

{

int n= 0;

while (life)

{

System.out.print("object "+num);

System.out.println(" n= "+n);

n++;

x += dx; y += dy;

if (x>w || x<0)

{

setChanged();//

notifyObservers(new Obs(num, n, true));//

dx= -dx;

}

if (y>h || y<0)

{

setChanged();//

notifyObservers(new Obs(num, n, true));//

dy= -dy;

}

 

// Уведомить

setChanged();

notifyObservers(new Obs(num, n, false));//

try

{

Thread.sleep (100);

synchronized(this)

{

if(waiting)

wait();

}

}

catch(InterruptedException iE){}

}

System.out.print("object "+num);

System.out.println(" finished ");

}

}

 

class SpecialBall implements Runnable, // Класс специального объекта//

Observer

{

public int x, y; // Координаты шара

Thread thread; // Поток

boolean yes; // Признак выполнения потока //

 

public SpecialBall (int X, int Y) // Конструктор

{

yes= false;

x= X; y= Y;

}

 

void Start () // Стартовать

{

if (!yes) // Если поток не выполнялся, то

{

yes= true; // пусть выполняется

thread= new Thread (this);//new ThreadStart (BallFunc));

thread.start (); // Стартовать поток

}

}

 

public void update(Observable ob, Object obj)//

{

Obs obs=(Obs) obj;

if(obs.getSpecial())

Start ();

}

 

public void run () // Выполнить поток//

{

try

{

Thread.sleep (2000);

}

catch(InterruptedException iE){}

yes= false;

}

}

 

 

//-------------------------------------

class Balls extends Frame implements Observer // Класс объектов

{

Ball [] pBall;

Color col;

public SpecialBall pSpecialBall;//

public Balls ()

{

this.setTitle("Balls");

this.setSize(400, 300);

col= Color.red;

pSpecialBall= new SpecialBall (30, 30);//

pBall= new Ball [2];

for (int i= 0; i < 2; i++)

{

pBall[i]=new Ball (i, i*3+10, 1*3+15, i*3+5, i*3+5);

pBall[i].addObserver(this);

pBall[i].addObserver(pSpecialBall);

}

this.show();

Start ();

}

//---------------

public void SetColor (Color Col) // Установить цвет

{

col= Col;

repaint();

}

 

//---------------

public void Start () // Стартовать

{

for(int i=0; i < 2; i++)

{

pBall[i]. Start ();

}

}

//---------------

public void Suspend () // Возобновить

{

for (int i=0; i < 2; i++)

pBall[i].Suspend ();

}

//---------------

public void Resume () // Приостановить

{

for (int i= 0; i < 2; i++)

pBall[i].Resume ();

}

 

public void update (Observable r, Object ob) // Обработчик события ev

{

Obs obs= (Obs) ob;

if(!obs.getSpecial())

{

System.out.print("object num= "+ obs.getNumber());

System.out.println(" n= "+ obs.getN());

repaint();

}

}

 

public void paint (Graphics g)

{

super.paint (g);

g.setColor(col);

for (int i= 0; i < 2; i++)

{

g.drawOval(pBall[i].x, pBall[i].y, 20, 20);

pBall[i].w= this.getSize().width;

pBall[i].h= this.getSize().height;

}

if(pSpecialBall.yes)

{

g.setColor(Color.yellow);

g.drawOval(pSpecialBall.x, pSpecialBall.y, 20, 20);

}

}

}

 

class User extends Balls implements ActionListener, // Класс пользователя шаров

ItemListener

{

private boolean run;

Frame pChildForm;

Button pBut;

private Choice c;// Ссылка на объект-список

public User ()

{

run= true;

pBut= new Button("OK");

pBut.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent aE)

{

System.out.println ("OkButton");

if (run)

{

run= false;

Suspend ();

}

else

if (!run)

{

run= true;

Resume ();

}

}

});

 

this.setSize(400, 300);

//---------------

pChildForm= new Frame ();

pChildForm.setLocation(250, 10);

pChildForm.setSize(250, 250);

pChildForm.setTitle("User");

pChildForm.show ();

pChildForm.setLayout (new FlowLayout ());// Установить расстановку

pChildForm.add(pBut);

 

c= new Choice (); // Создать объект списка

c.addItem ("blue");// Добавить элемент "blue"

c.addItem ("green");//Добавить элемент "green"

c.addItem ("red");//Добавить элемент "red"

pBut.addActionListener(this);

pChildForm.add(c, new Point (100,20));//Подсоединить список к окну

pChildForm.setVisible (true);// Показать кнопку и список в окне

}

public void itemStateChanged (ItemEvent iE) { }

 

public void actionPerformed(ActionEvent aE)

{

switch (c.getSelectedIndex ())// Получить индекс списка

{

case 0: col= Color.blue;//

break;

case 1: col= Color.green;//

break;

case 2: col= Color.red;//

break;

}

repaint ();// Перерисовать

}

 

//-------------------------

public static void main ()

{

User u= new User();

}

}

/*

Результат:

Появились прикладное окно с перемещающимися шарами и дочернее окно

с кнопкой и элементом списка. При нажатии на кнопку можно приостанавливать или возобновлять

движение шаров. Выделив в списке цвет, можно изменить цвет шаров.

При отталкивании каждого шара от границ окна появляется в верхнем левом углу окна желтый шар

и исчезает через 2000 мс.

*/

 

 

package BallsCj7;

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

//C# File BallsCj7

// Синхронизировать потоки с разделяемым ресурсом типа SpecialBall

import java.util.*;

import java.awt.*;

import java.awt.event.*;

 

class Obs

{

private int num, n;

private boolean special;//

 

public Obs (int num, int n, boolean special)//

 

{this.num= num; this.n= n;this.special= special;}//

 

int getNumber(){return num;}

 

int getN(){return n;}

 

boolean getSpecial(){return special;}//

}

 

class Ball extends Observable implements Runnable // Класс обычного объекта

{

int num;

Thread thread;

boolean run;

boolean waiting= false;

boolean life;

public int x, y;

public int w, h;

public int dx, dy;

SpecialBall sB;

 

//public Ball (int Num, int X, int Y, int Dx, int Dy)// Конструктор

public Ball (int Num, int X, int Y, int Dx, int Dy, SpecialBall SB)

{

num= Num; life= false; run= false;

w= 100; h= 100;

x= X; y= Y; dx= Dx; dy= Dy;

sB= SB;

Start ();

}

 

public void Start () // Стартовать

{

if (!run)

{

run= true;

life= true;

thread= new Thread (this);

thread.start ();

}

}

//---------------

synchronized public void Suspend () // Приостановить

{

if (run)

{

run= false;

waiting=true;

}

}

//---------------

synchronized public void Resume () // Возобновить

{

if (!run)

{

run= true;

waiting=false;

notify();

}

}

//---------------

public void run () // Выполнить поток

{

int n= 0;

while (life)

{

//synchronized(sB)

{

System.out.print("object "+num);

System.out.println(" n= "+n);

n++;

x += dx; y += dy;

{

if (x>w || x<0)

{

setChanged();//

notifyObservers(new Obs(num, n, true));//

dx= -dx;

}

if (y>h || y<0)

{

setChanged();//

notifyObservers(new Obs(num, n, true));//

dy= -dy;

}

}

 

// Уведомить

setChanged();

notifyObservers(new Obs(num, n, false));//

try

{

Thread.sleep (100);

//Thread.sleep (50);

synchronized(this)

{

if(waiting)

wait();

}

}

catch(InterruptedException iE){}

}

}

System.out.print("object "+num);

System.out.println(" finished ");

}

}

 

class SpecialBall implements Runnable, // Класс специального объекта//

Observer

{

public int x, y; // Координаты шара

Thread thread; // Поток

boolean yes; // Признак выполнения потока //

 

public SpecialBall (int X, int Y) // Конструктор

{

yes= false;

x= X; y= Y;

}

 

void Start () // Стартовать

{

if (!yes) // Если поток не выполнялся, то

{

yes= true; // пусть выполняется

thread= new Thread (this);//new ThreadStart (BallFunc));

thread.start (); // Стартовать поток

}

}

 

public void update(Observable ob, Object obj)//

{

Obs obs=(Obs) obj;

if(obs.getSpecial())

Start ();

}

 

public void run () // Выполнить поток//

{

try

{

Thread.sleep (2000);

}

catch(InterruptedException iE){}

yes= false;

}

}

 

 

//-------------------------------------

class Balls extends Frame implements Observer // Класс объектов

{

 

Ball [] pBall;

Color col;

public SpecialBall pSpecialBall;//

public Balls ()

{

this.setTitle("Balls");

this.setSize(400, 300);

col= Color.red;

pSpecialBall= new SpecialBall (30, 30);//

//pBall= new Ball [2];

pBall= new Ball [4];

//for (int i= 0; i < 2; i++)

for (int i= 0; i < 4; i++)

{

//pBall[i]=new Ball (i, i*3+10, 1*3+15, i*3+5, i*3+5);

pBall[i]=new Ball (i, i*3+10, 1*3+15, i*3+5, i*3+5

, pSpecialBall);

pBall[i].addObserver(this);

pBall[i].addObserver(pSpecialBall);

}

this.show();

Start ();

}

//---------------

public void SetColor (Color Col) // Установить цвет

{

col= Col;

repaint();

}

 

//---------------

public void Start () // Стартовать

{

for(int i=0; i < 4; i++)

{

pBall[i]. Start ();

}

}

//---------------

public void Suspend () // Возобновить

{

for (int i=0; i < 4; i++)

pBall[i].Suspend ();

}

//---------------

public void Resume () // Приостановить

{

for (int i= 0; i < 4; i++)

pBall[i].Resume ();

}

 

public void update (Observable r, Object ob) // Обработчик события ev

{

Obs obs= (Obs) ob;

if(!obs.getSpecial())

{

System.out.print("object num= "+ obs.getNumber());

System.out.println(" n= "+ obs.getN());

repaint();

}

}

 

public void paint (Graphics g)

{

super.paint (g);

g.setColor(col);

//for (int i= 0; i < 2; i++)

for (int i= 0; i < 4; i++)

{

g.drawOval(pBall[i].x, pBall[i].y, 20, 20);

pBall[i].w= this.getSize().width;

pBall[i].h= this.getSize().height;

}

if(pSpecialBall.yes)

{

g.setColor(Color.yellow);

g.drawOval(pSpecialBall.x, pSpecialBall.y, 20, 20);

}

}

}

 

class User extends Balls implements ActionListener, // Класс пользователя шаров

ItemListener

{

private boolean run;

Frame pChildForm;

Button pBut;

private Choice c;// Ссылка на объект-список

public User ()

{

run= true;

pBut= new Button("OK");

pBut.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent aE)

{

System.out.println ("OkButton");

if (run)

{

run= false;

Suspend ();

}

else

if (!run)

{

run= true;

Resume ();

}

}

});

 

this.setSize(400, 300);

//---------------

pChildForm= new Frame ();

pChildForm.setLocation(250, 10);

pChildForm.setSize(250, 250);

pChildForm.setTitle("User");

pChildForm.show ();

pChildForm.setLayout (new FlowLayout ());// Установить расстановку

pChildForm.add(pBut);

 

c= new Choice (); // Создать объект списка

c.addItem ("blue");// Добавить элемент "blue"

c.addItem ("green");//Добавить элемент "green"

c.addItem ("red");//Добавить элемент "red"

pBut.addActionListener(this);

pChildForm.add(c, new Point (100,20));//Подсоединить список к окну

pChildForm.setVisible (true);// Показать кнопку и список в окне

 

// Примененить внутренний анонимный класс

this.addWindowListener (new WindowAdapter ()

{

public void windowClosing (WindowEvent wE)

{

System.exit(0);

}

});

 

}

public void itemStateChanged (ItemEvent iE) { }

 

public void actionPerformed(ActionEvent aE)

{

switch (c.getSelectedIndex ())// Получить индекс списка

{

case 0: col= Color.blue;//

break;

case 1: col= Color.green;//

break;

case 2: col= Color.red;//

break;

}

repaint ();// Перерисовать

}

 

//-------------------------

public static void main ()

{

User u= new User();

}

}

/*

Результат:

Появились прикладное окно с перемещающимися шарами и дочернее окно

с кнопкой и элементом списка. При нажатии на кнопку можно приостанавливать или во-зобновлять

движение шаров. Выделив в списке цвет, можно изменить цвет шаров.

При отталкивании каждого шара от границ окна появляется в верхнем левом углу окна желтый шар

и исчезает через 2000 мс.

*/

 

 

Применять оператор synchronized надлежит там, где он охватывает обращение только к разделяемому ресурсу, иначе выполнение потоков будет существенно замедляться, поскольку они будут ждать выполнения иными потоками действий, не связанных с ресурсом.

 

 

 

 

<== предыдущая лекция | следующая лекция ==>
If(pSpecialBall.yes) | Тема 4. Внешняя среда организации. Взаимодействие организации с внешней средой
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 279; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.557 сек.