на начало
На главную страницу
Форум   

Статья :: Организация поточной обработки с параметрами


Организация поточной обработки с параметрами

Асинхронный обратный вызов выполняется в потоке, отличном от того, в котором был сделан вызов Beginlnvoke. Если требования к организации поточной обработки просты, то для передачи параметров функциям потока можно использовать асинхронные делегаты. Ссылка на пространство имен Threading (Организация поточной обработки) не нужна. Ссылка на это пространство имен в примере AsynchThreading нужна только для метода Thread: : Sleep (Поток::Режим ожидания), используемого в иллюстративных целях.
PrintNumbers суммирует числа от начального целого числа, переданного в качестве параметра, до числа, на 10 большего чем начальное целое число. Результат (сумма) возвращается вызывающей программе. PrintNumbers может использоваться для делегата, определенного как Print (Печать).

//AsynchThreading.h
using namespace System;
// использование пространства имен Система;
using namespace System::Threading;
// использование пространства имен Система::Потоки;
public _delegate int Print(int i);
// делегат int Печать (int i);
public _gc class Numbers
// класс сборщика мусора - Числа
{
public:
int PrintNumbers(int start) // начало
{
int threadld = Thread::CurrentThread->GetHashCoae();
// Поток
Console::WriteLine (
"PrintNumbers Id: {0}",
// " Идентификатор PrintNumbers: {0}"
threadld.ToString() ) ;
int sum =0; // сумма = О for (int i = start; i < start + 10; i++)
{
Console::WriteLine(i.ToString());
Thread::Sleep(500);
// Поток:: Бездействие sum += i;
// суммируем
}
return sum;
// сумма
}

Функция Main (Главная) определяет два обратных вызова и вызывает их явно с различными начальными целыми числами. Она ждет, пока оба из дескрипторов синхронизации не получат сигнал. Endlnvoke вызывается для обоих и результат выводится на консоль.

Numbers *n = new Numbers;
// новые Числа
Print *pfnl = new Print(n, Numbers::PrintNumbers);
// новая Печать
Print *pfn2 = new Print (n, Numbers::PrintNumbers};
// новая Печать lAsyncResult *arl =
pfnl->Begin!nvoke(0, 0, 0);
lAsyncResult *ar2 =
pfn2->Begin!nvoke(100, 0, 0);
WaitHandle *wh [] = new WaitHandle*[2];
wh[0] = arl->AsyncWaitHandle;
wh[l] = ar2->AsyncWaitHandle;
// удостоверимся, что все сделано перед окончанием
WaitHandle::WaitAll(wh);
int suml = pfnl->End!nvoke(arl);
int sum2 = pfn2->End!nvoke(ar2);
Console::WriteLine(
"Suml = {0} Sum2 = {!}",
suml.ToString(), sum2.ToString());

Вот выдача программы.

MainThread Id: 2 // Идентификатор
PrintNumbers Id: 14 // Идентификатор 0
1
2
3
4
5
6
7
8
9
PnntNumbers Id: 14 // Идентификатор
100
101
102
103
104
105
106
107
108
109
Suml =45 Sum2 =1045


Организация поточной обработки с параметрами

страницы в данном разделе 
Глава 8. Классы каркаса .NET Framework Классы каркаса .NET Framework
Метаданные и отражение Класс туре (Тип)
Динамическое связывание Ввод и вывод в .NЕТ
Потоковые классы Примитивные типы данных и потоки
TextReader И TextWriter Обработка файлов
Сериализация, или преобразование в последовательную форму Объекты сериализации
ISerializable Модель приложений .NET
Поток Изоляция потоков
Синхронизация коллекций Контекст
Заместители и заглушки ContextBoundObject
Изоляция приложений Прикладная область
Прикладные области и сборки Класс AppDomain (Прикладная область)
События AppDomain (Прикладная область) Пример AppDomain (Прикладная область)
Маршализация, прикладные области и контексты Асинхронное программирование
Асинхронные шаблоны проектирования lAsyncResult
Использование делегатов в асинхронном программировании Организация поточной обработки с параметрами
Удаленный доступ Краткий обзор удаленного доступа
Удаленные объекты Активация
Пример удаленного объекта Пример программы, реализующей удаленный доступ
Метаданные и удаленный доступ Конфигурационные файлы удаленного доступа
Программируемые атрибуты Использование самостоятельно созданного атрибута
Определение класса атрибута Определение базового класса
Сборка мусора Уничтожение объектов
Неуправляемые ресурсы и освобождение ранее выделенной области памяти Поколения
Завершение и раскручивание стека Управление сборкой мусора с помощью класса сборщика мусора GC
Программа-пример Резюме


Содержание сайта (выборка)
Apache
Протоколы TCP/IP (принципы, протоколы и архитектура)



PHP, PELR, JSP
PHP
JavaServer Pages (JSP)

Базы данных
Основы mysql
СУБД INFORMIX
СУБД POSTGRES
Основы проектирования реляционных баз данных

HTML, javascript
Спецификация HTML 4.01
Каскадные Таблицы Стилей, Уровень 2
Клиентский JavaScript. Справочник.
JavaScript руководство пользователя
Серверный JavaScript 1.4. Руководство по Использованию.

Паскаль, C, C++, C#
GCC (примеры)
FAQ Валентинa Озеровa DELPHI
C



 
© faq.pp.ru, справочник программиста