Вход/Регистрация
Интернет-журнал "Домашняя лаборатория", 2007 №6
вернуться

Журнал «Домашняя лаборатория»

Шрифт:

"Server (Sum method) thread = " +

Thread.CurrentThread.GetHashCode+

"; PoolThread = "+

Thread.CurrentThread.IsThreadPoolThread);

Thread.Sleep(1000);

z = 0;

try {

z = checked((int)(x + y));

}

catch (Exception) {

return false;

}

return true;

}

public static bool MultBy2(int x, out int y) {

Console.WriteLine {

"Server (MultBy2 method) thread = " +

Thread.CurrentThread.GetHasheode+

"; PoolThread = "+

Thread.CurrentThread.IsThreadPoolThread);

Thread.Sleep(1000);

y = 0;

try {

у = checked((int) (x*2));

}

catch (Exception) {

return false;

}

return true;

}

}

Public class Client {

private static int workCount = 0;

private delegate bool HardFunction2Args (

int x, int y, out int result);

private delegate bool HardFunctionlArg (

int x, out int result);

private static void SumCallback(IAsyncResult ar) {

int z;

HardFunction2Args sum =

(HardFunction2Args)ar.AsyncState;

bool result = sum.Endlnvoke(out z, ar);

if (result) Console.WriteLine (

"SumCallback: Sum = " + z);

else Console.WriteLine (

"SumCallback: Bad arguments for Server.Sum

workCount++;

}

private static void MultCallback(IAsyncResult ar) {

int z;

HardFunctionlArg mult =

(HardFunctionlArg)ar.AsyncState;

bool result = mult.Endlnvoke(out z, ar);

if (result) Console.WriteLine (

"MultCallback: MultBy2 = " + z);

else Console.WriteLine (

"MultCallback: Bad argument for MultBy2");

workCount++;

}

public static void Main {

int sumResult, multResult, count = 0;

Console.WriteLine("Client thread = " +

Thread.CurrentThread.GetHashCode + PoolThread = "+

Thread.CurrentThread.IsThreadPoolThread);

HardFunction2Args sum =

new HardFunction2Args(Server.Sum);

HardFunctionlArg mult =

new HardFunctionlArg(Server.MultBy2);

AsyncCallback sumCallback =

new AsyncCallback(SumCallback);

AsyncCallback multCallback =

new AsyncCallback(MultCallback);

IAsyncResult arSum = sum.Beginlnvoke(3, 4,

out sumResult, sumCallback, sum);

IAsyncResult arMult = mult.Beginlnvoke(5,

out multResult, multCallback, mult);

while (workCount < 2) {

Console.WriteLine("Client thread: count = "+ count++);

Thread.Sleep(100);

}

Console.WriteLine("Bye!");

}

}

Комментарии к коду.

Сервер и клиент представлены соответственно классами Server и Client.

Сервер

Сервер реализует два статических метода:

• Метод public static bool Sum(int x, int у, out int z) {… } обеспечивает сложение двух чисел типа int. Результат записывается в переменную z типа int. В случае возникновения переполнения возвращается false, при его отсутствии — true.

Временная сложность проводимых вычислений имитируется с помощью вызова Thread.Sleер(1000).

В самом начале, еще до проведения вычислений, на консоль выводится хеш потока, выполняющего вызов (Thread.CurrentThread.GetHashCode), и информация о принадлежности данного потока классу рабочих потоков из пула потоков (Thread.CurrentThread.IsThreadPoolThread)).

• Метод public static bool MuitBy2(int x, out int y) {… } обеспечивает умножение числа на 2 и реализован аналогично предыдущему методу.

  • Читать дальше
  • 1
  • ...
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: