типа, претендую на статью... надо же когда-то начинать...
Использование фиберов в VB для одновременного выполнения нескольких задач.
В Win98+/WinNT35+ доступны фиберы, т.е. выполняемые задачи, управление которыми не осуществляется системой, а возложено на программиста. Говорят, они были введены в WinNT для облегчения переноса UNIX-приложений, где существовало несколько видов нитей, как управляемые системой, так и управляемые программистом.
В соответствии с "текстильной" аналогией, процесс состоит из нитей, а нити - из фиберов. У каждого фибера, как и у нити, сохраняется контекст, т.е. внутреннее состояние - значения регистров и т.п. Однако фиберы выполняются строго попеременно, из-за чего отпадает необходимость в запутанной синхронизации задач, которая так усложняет разработку многонитёвых приложений. Переключения между фиберами осуществляются не по инициативе системы, а по запросу программиста. Фиберы сродни "сопрограммам" в книге Кнута "Искусство программирования", т.е. процедурам с несколькими точками входа и несколькими точками выхода.
Поскольку многофиберные приложения могут быть и однонитёвые, они вполне реализуемы в VB. Однако, к моему удивлению ни одного примера такого приложения я в Интернете не нашёл. Придётся восполнить этот пробел.
Для примера рассмотрим одновременный поиск простых чисел и решений задачи Диофанта от Daz. Не самый жизненный пример, но уж какой есть
Самое главное в этом примере - его, в принципе, можно было написать и на таймерах, - это удобство программирования. Вместо хранения счётчиков каждого цикла в статических переменных, мы пишем цикл именно так, как писали бы его без одновременно выполняемого другого.
Сложности с отладкой определённые есть, но я считаю их несущественными - например, нельзя делать Step Into (F8) на вызове SwitchToFiber, и нельзя нажимать End, когда выполняется не главный фибер. В общем же, код работает прекрасно и под отладчиком, и в скомпилированном виде.
В примере для пущей эффектности выводится только каждое сотое простое число - иначе их список быстро переполняется.
Ещё несколько примечаний касательно применения фиберов стоят прямо в коде примера.
ПРИЛОЖЕНИЕ: краткая историческая справка.
Идея заюзать фиберы в VB для имитации многонитёвости пришла мне в январе с.г. ( http://groups.google.com/groups?selm=42 ... put=gplain ) Довольно быстро я получил работающее многофиберное приложение (из десятка строк), но прогресс застопорился из-за неожиданной проблемы: я так и не смог придумать, где многофиберность может понадобиться ( http://groups.google.com/groups?selm=42 ... put=gplain ) Однако идея о том, что фиберы всё-таки могут быть полезны, дремала во мне до тех пор, пока Daz не предложил задачу Диофанта. Вот тогда-то мне и пришла в голову идея этого примера. Daz-у огромная благодарность
Других примеров использования многофиберности в VB, кроме моего, гуглу неизвестно. Так что считаю себя первопроходцем