Читаем C# 4.0 полное руководство - 2011 полностью

Для тогочтобы стало понятнее назначение методовWait иPulse, рассмотрим пример программы, имитирующей тиканье часов и отображающей этот процесс на экране словами "тик" и "так". Для этой цели в программе создается классTickTock,содержащий два следующих метода:TickиТоск.МетодTick выводит на экран слово "тик", а методТоск () — слово "так". Для запуска часов далее в программе создаются два потока: один из них вызывает методTick, а другой — методТоск. Преследуемая в данном случае цель состоит в том, чтобы оба потока выполнялись, поочередно выводя на экран слова "тик" и "так", из которых образуется повторяющийся ряд "тик-так", имитирующий ход часов/

using System;

using System.Threading;

class TickTock {

object lockOn = new object ; public void Tick(bool running) { lock(lockOn) {

if(!running) { // остановить часы ‘Monitor.Pulse(lockOn); // уведомить любые ожидающие потоки return;

}

Console.Write("тик ");

Monitor.Pulse(lockOn); // разрешить выполнение метода Tock Monitor.Wait(lockOn);    // ожидать завершения метода Tock

}

}

public void Tock(bool running) { lock(lockOn) {

if(!running) { // остановить часы

Monitor.Pulse(lockOn); // уведомить любые ожидающие потоки return;

}

Console.WriteLine("так");

Monitor.Pulse(lockOn); // разрешить выполнение метода Tick Monitor.Wait(lockOn);    // ожидать завершения метода Tick

}

}

}

class MyThread {

public Thread Thrd;

TickTock ttOb;

// Сконструировать новый поток.

public MyThread(string name, TickTock tt) {

Thrd = new Thread(this.Run); ttOb = tt;

Thrd.Name = name;

Thrd.Start;    '

}

// Начать выполнение нового потока, void Run {

if(Thrd.Name == "Tick") {

for(int i=0; i<5; i++) ttOb.Tick(true); ttOb.Tick(false) ;

}

else {

for(int i=0; i<5; i++) ttOb.Tock(true); ttOb.Tock(false);

class TickingClock { static void Main {

TickTock tt = new TickTock ;

MyThread mtl = new MyThread("Tick", tt);

MyThread mt2 = new MyThread("Tock", tt) ; mtl.Thrd.Join; mt2.Thrd.Join;

Console.WriteLine("Часы остановлены");

}

}

Ниже приведен результат выполнения этой программы.

тик так тик так тик так тик так тик так

Часы остановлены

Рассмотрим эту программу более подробно. В методе Main создается объект tt типа TickTock, который используется для запуска двух потоков на выполнение. Если в методе Run из класса MyThread обнаруживается имя потока Tick, соответствующее ходу часов "тик", то вызывается метод Tick . А если это имя потока Tock, соответствующее ходу часов "так", то вызывается метод Tock . Каждый из этих методов вызывается пять раз подряд с передачей логического значения true в качестве аргумента. Часы идут до тех пор, пока этим методам передается логическое значение true, и останавливаются, как только передается логическое значение false.

Самая важная часть рассматриваемой здесь программы находится в методах Tick и Tock . Начнем с метода Tick , код которого для удобства приводится ниже.

public void Tick(bool running) { lock(lockOn) {

if(!running) { // остановить часы

Перейти на страницу:

Похожие книги

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT