русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Извлечение значений (данных) с помощью Callback методов


Дата добавления: 2015-07-09; просмотров: 538; Нарушение авторских прав


А для анализа результата выполнения вторичного потока можно использовать метод класса, отвечающего за запуск вторичного потока. Соответствующим образом настроенный делегат также может быть передан в качестве параметра конструктору, отвечающему за организацию вторичного потока. Вызывать метод класса, запустившего вторичный поток, можно будет по окончании работы во ВТОРИЧНОМ потоке.

Важно! ЭТА ФУНКЦИЯ сама будет выполняться во ВТОРИЧНОМ потоке! Однако если главный поток ещё не завершён, а остаётся в ожидании результатов (например, в результате выполнения метода Join), это обстоятельство не является проблемой. Будучи сама членом класса, эта функция-член имеет доступ ко всем данным и методам своего класса. И неважно, в каком в каком потоке она выполняется.

 

using System;

using System.Threading;

 

// Класс WorkThread включает необходимую информацию,

// метод и делегат для вызова метода, который запускается

// после выполнения задачи.

public class WorkThread

{

// Входная информация.

private string entryInformation;

private int value;

// Ссылка на объект-представитель класса-делегата, с помощью которого

// вызывается метод обратного вызова. Сам класс-делегат объявляется позже.

private CallbackMethod callback;

 

// Конструктор получает кходную информацию и настраивает

// callback delegate.

public WorkThread(string text, int number,

CallbackMethod callbackDelegate)

{

entryInformation = text;

value = number;

callback = callbackDelegate;

}

 

// Метод, обеспечивающий выплнение поставленной задачи:

// составляет строку и после дополнительной проверки настройки

// callback делегата обеспечивает вызов метода.

public void ThreadProc()

{

Console.WriteLine(entryInformation, value);

if (callback != null)



callback(1); // Вот, вызвал ЧУЖОЙ МЕТОД в СВОЁМ потоке.

}

}

 

// Класс-делегат задаёт сигнатуру callback методу.

//

public delegate void CallbackMethod(int lineCount);

// Entry Point for the example.

//

public class Example

{

public static void Main()

{

// Supply the state information required by the task.

WorkThread tws = new WorkThread(“This report displays the number {0}.”,

125,

new CallbackMethod(ResultCallback));

Thread t = new Thread(new ThreadStart(tws.ThreadProc));

t.Start();

Console.WriteLine(«Первичный поток поработал. Теперь ждёт первой звезды...»);

t.Join();

Console.WriteLine(«Вторичный поток отработал. Главный поток остановлен. Всё...»);

}

 

// Callback метод, естественно, соответствует сигнатуре callback класса делегата.

public static void ResultCallback(int lineCount)

{

Console.WriteLine(“Вторичный поток обработал {0} строк.”, lineCount);

}

}

Callback метод – метод-член класса, запустившего вторичный поток. Этот метод запускается “в качестве уведомления” о том, что вторичный поток “завершил выполнение своей миссии”. Главная проблема Callback метода заключается в том, что он выполняется в “чужом” потоке.



<== предыдущая лекция | следующая лекция ==>
Передача данных во вторичный поток | Посредством общедоступных (public) данных


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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