Чтение онлайн

на главную - закладки

Жанры

Интернет-журнал "Домашняя лаборатория", 2007 №6
Шрифт:

Метод MyCallBack, ссылка на который передана конструктору при создании делегата myCallBackDelegate, прежде всего выводит на консоль информацию о потоке, в котором он исполняется. Как и раньше это хеш потока и данные о его типе. В данном случае мы полагаем, что значение последнего параметра при каждом вызове этого метода будет равно true, так как выполняться этот метод должен рабочим потоком.

Далее MyCallBack выводит на консоль

некоторое сообщение. Это сообщение состоит из следующих частей:

1. Префикс

Ради демонстрации того, как можно объявлять делегат нового типа, префикс формируется излишне сложно — посредством использования делегата нового типа — MyDelegate. Из его объявления

2. private delegate String MyDelegate ;

видно, что с делегатом данного типа можно связать любую функцию, возвращающую String и не имеющую аргументов. В теле метода MyCallBack создается новый делегат hello

MyDelegate hello = new MyDelegate(MyHello);

которому передается ссылка на метод MyHello этого же класса Test. Именно этот метод и формирует префикс вида Tеst_XXX:, где вместо XXX будет подставляться порядковый номер текущего вызова метода MyCallBack.

3. Порядковый номер вызова данного метода

При каждом вызове метода MyCallBack счетчик count увеличивается на единицу.

4. Информация о причине вызова данного метода

Через параметр timedOut метод MyCallBack получает от системы информацию о причине его вызова. Если получено значение false, то этот метод был вызван благодаря тому, что кто-то установил событие myEvent в состояние signaled. Значение true будет получено в том случае, если метод был вызван по причине завершения срока ожидания.

Последний метод NewEvent класса Test как раз и может использоваться клиентами для перевода события _myEvent в состояние signaled.

Теперь вновь обратимся к коду метода Main.

После создания экземпляра test класса Test вызывается его метод NewEvent в результате чего из пула рабочих потоков извлекается новый поток, который и выполняет метод MyCallBack.

Напомним, что после этого событие _myEvent автоматически переходит в начальное состояние.

Далее основной поток засыпает на 500 тс. В связи с тем, что интервал ожидания, заданный четвертым параметром в ThreadPool.RegisterWaitForSingleObject равен 100 mc, метод MyCallBack будет вызван несколько раз по причине завершения периода ожидания.

Далее во второй раз вызывается метод NewEvent, и MyCallBack вызывается по причине перехода события myEvent в состояние signaled.

И, наконец, основной поток засыпает еще на 1000 mс, в течении которых MyCallBack вызывается с интервалом 100 mс по причине завершения времени ожидания.

Через 1000 mс основной поток просыпается и выполнение всего приложения (включая все рабочие потоки) завершается.

Ниже приводится вывод на консоль, полученный после запуска данного приложения:

>>> МуАрр thread = 16 IsPoolThread = False

>>> Test constructor thread = 16 IsPoolThread = False

>>> MyCallback thread = 18 IsPoolThread = True

Test_1: Count = 1 timedOut = False

>>> MyCallback thread = 18 IsPoolThread = True

Test_2: Count = 2 timedOut = True

>>> MyCallback thread = 18 IsPoolThread = True

Test_3: Count = 3 timedOut = True

>>> MyCallback thread = 18 IsPoolThread = True

Test_4: Count = 4 timedOut = True

>>> MyCallback thread = 18 IsPoolThread = True

Test_5: Count = 5 timedOut = True

>>> MyCallback thread = 18 IsPoolThread = True

Test_6: Count = 6 timedOut = True

>>> MyCallback thread = 18 IsPoolThread = True

Test_7: Count = 7 timedOut = False

>>> MyCallback thread = 18 IsPoolThread = True

Test_8: Count = 8 timedOut = True

>>> MyCallback thread = 18 IsPoolThread = True

Test_9: Count = 9 timedOut = True

>>>MyCallback thread = 18 IsPoolThread = True

Test_10: Count = 10 timedOut = True

>>> MyCallback thread = 18 IsPoolThread = True

Test_11: Count = 11 timedOut = True

>>> MyCallback thread = 18 IsPoolThread = True

Test_12: Count = 12 timedOut = True

>>> MyCallback thread = 18 IsPoolThread = True

Test_13: Count = 13 timedOut = True

>>>MyCallback thread = 18 IsPoolThread = True

Test_14: Count = 14 timedOut = True

>>> MyCallback thread = 18 IsPoolThread = True

Test_15: Count = 15 timedOut = True

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

Отверженный III: Вызов

Опсокополос Алексис
3. Отверженный
Фантастика:
фэнтези
альтернативная история
7.73
рейтинг книги
Отверженный III: Вызов

Разбитная разведёнка

Балер Таня
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Разбитная разведёнка

Вспомнить всё (сборник)

Дик Филип Киндред
Фантастика:
научная фантастика
6.00
рейтинг книги
Вспомнить всё (сборник)

Эволюционер из трущоб. Том 2

Панарин Антон
2. Эволюционер из трущоб
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 2

Полковник Гуров. Компиляция (сборник)

Макеев Алексей Викторович
Полковник Гуров
Детективы:
криминальные детективы
шпионские детективы
полицейские детективы
боевики
крутой детектив
5.00
рейтинг книги
Полковник Гуров. Компиляция (сборник)

Отверженный VI: Эльфийский Петербург

Опсокополос Алексис
6. Отверженный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Отверженный VI: Эльфийский Петербург

На распутье

Кронос Александр
2. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На распутье

Идеальный мир для Лекаря 6

Сапфир Олег
6. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 6

Ни слова, господин министр!

Варварова Наталья
1. Директрисы
Фантастика:
фэнтези
5.00
рейтинг книги
Ни слова, господин министр!

Купец VI ранга

Вяч Павел
6. Купец
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Купец VI ранга

Звездная Кровь. Изгой II

Елисеев Алексей Станиславович
2. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
попаданцы
технофэнтези
рпг
5.00
рейтинг книги
Звездная Кровь. Изгой II

Измена. Жизнь заново

Верди Алиса
1. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Жизнь заново

Измена. Право на сына

Арская Арина
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на сына

Князь Мещерский

Дроздов Анатолий Федорович
3. Зауряд-врач
Фантастика:
альтернативная история
8.35
рейтинг книги
Князь Мещерский