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

на главную

Жанры

Интернет-журнал "Домашняя лаборатория", 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

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

Неудержимый. Книга X

Боярский Андрей
10. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга X

Месть Паладина

Юллем Евгений
5. Псевдоним `Испанец`
Фантастика:
фэнтези
попаданцы
аниме
7.00
рейтинг книги
Месть Паладина

Неудержимый. Книга XVIII

Боярский Андрей
18. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XVIII

Александр Агренев. Трилогия

Кулаков Алексей Иванович
Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Александр Агренев. Трилогия

Сильнейший ученик. Том 2

Ткачев Андрей Юрьевич
2. Пробуждение крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сильнейший ученик. Том 2

Развод и девичья фамилия

Зика Натаэль
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Развод и девичья фамилия

Два лика Ирэн

Ром Полина
Любовные романы:
любовно-фантастические романы
6.08
рейтинг книги
Два лика Ирэн

Я снова не князь! Книга XVII

Дрейк Сириус
17. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я снова не князь! Книга XVII

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Полководец поневоле

Распопов Дмитрий Викторович
3. Фараон
Фантастика:
попаданцы
5.00
рейтинг книги
Полководец поневоле

Я снова граф. Книга XI

Дрейк Сириус
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я снова граф. Книга XI

Аномальный наследник. Том 1 и Том 2

Тарс Элиан
1. Аномальный наследник
Фантастика:
боевая фантастика
альтернативная история
8.50
рейтинг книги
Аномальный наследник. Том 1 и Том 2

Гром над Тверью

Машуков Тимур
1. Гром над миром
Фантастика:
боевая фантастика
5.89
рейтинг книги
Гром над Тверью