Продожение начатое в
вторник, 28 декабря 2010 г.
среда, 22 декабря 2010 г.
Использование OmniThread Libray 2.0 (OTL 2.0) для создания многопоточных приложений - 1
Недавно вышла OTL 2.0, в коей были сделаны многие изменения и добавлены новые возможности. О них я и постараюсь в мере сил рассказать, опираясь на материал предоставленный автором библиотеки.
четверг, 16 декабря 2010 г.
Вышла в свет версия 2.0 OmniThreadLibray
Итак после долгого перерыва вышла в свет новая 2.0 версия замечательной библиотеки для разработки многопоточных приложений OmniThreadLibray.
Скачать ее можно с http://code.google.com/p/omnithreadlibrary/downloads/list
В библиотеку включены очень крупные изменения. В частности для пользователей версии Delphi 2009 - добавлены новые возможности по параллельным вычислениям (unit OtlParallel). О них я постараюсь расказать в следующих заметках.
Скачать ее можно с http://code.google.com/p/omnithreadlibrary/downloads/list
В библиотеку включены очень крупные изменения. В частности для пользователей версии Delphi 2009 - добавлены новые возможности по параллельным вычислениям (unit OtlParallel). О них я постараюсь расказать в следующих заметках.
вторник, 23 ноября 2010 г.
среда, 3 ноября 2010 г.
Embarcadero приглашает принять участие в серии вебинаров для разработчиков и администраторов баз данных
Embarcadero приглашает принять участие в серии вебинаров для разработчиков и администраторов баз данных:
Узнать подробнее и зарегистрироваться:
Узнать подробнее и зарегистрироваться:
вторник, 26 октября 2010 г.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 17
Информация об окружении
В данном разделе мы поговорим об интерфейсах предоставляющих различную информацию об окружении. С помощью них мы можем получить данные о системе, информацию, о количестве процессоров в системе, потоках. Эти интерфейсы представлены в модуле OtlCommon.pas.
четверг, 21 октября 2010 г.
Полезняшки. Запись в БД (FibPlus)
Очень часто при работе с Firevbird-ом мне приходилось генерировать различные скрипты для обновления БД. В основном это касалось скриптов вида Insert/Update. Так как большинство таких скриптов типовые, мне очень скоро пришла в голову мысль написать функцию помощник в записи/обновлении БД.
вторник, 19 октября 2010 г.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 16
Система связи
В данном разделе мы рассмотрим более детально подсистему связи OTL. За работу системы связи отвечает файл OtlComm.pas. Как вы знаете, данная система используется интерфейсами OTL для передачи сообщений между фоновыми задачами и основным потоком программы. Как это происходит, мы разобрались на примерах ранее. Однако использование системы связи не затрагивает только библиотеку OT. Дело в том, что система не связана жестко с OTL-библиотекой (выделена отдельно), что в свою очередь дает вам возможность использовать ее и не в OTL-приложениях.
вторник, 12 октября 2010 г.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 15
Создание задачи
OTL как вы знаете, предлагает несколько различных способов создания задач.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 14
Внутренняя организация OTL
Что бы успешно двигаться дальше, давайте немного углубимся в дебри OTL и поговорим о внутреннем устройстве данной библиотеки.
Самый важный модуль OTL – OtlTaskControl.pas. Это модуль с помощью интерфейса устанавливает связь с потоковой задачей.
четверг, 7 октября 2010 г.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 13
Создание пула задач
Начиная с версии 1.03, библиотека OTL поддерживает создание фоновых задач в пулах. Использование пулов дает возможность переложить функции управления созданными задачами с наших плеч на пул. Фактически нам не нужно будет думать о непосредственном контроле над созданными нами задачами, OTL делает это за нас.
вторник, 5 октября 2010 г.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 12
Практика OTL. Фоновый поиск файлов.
В этом разделе мы немного отвлечемся от исследования возможностей OTL. Перейдем так сказать к практике. И начнем рассмотрение с демонстрационного примера tests\23_BackgroundFileSearch показывающего как с помощью OTL можно сделать фоновый поиск файлов.
четверг, 30 сентября 2010 г.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 11
Вызов метода по имени или по адресу
В этом разделе мы рассмотрим различные способы вызова методов фоновой задачи.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 10
Очереди задач
Одной из возможностей OTL являются очереди. Что они собой представляют? Допустим Вам нужно запустить несколько фоновых задач, но в определенном порядке. Например, вы работаете с некоторым массивом данных. Первый поток, заполняет данный массив некоторыми значениями. Второй поток должен переслать весь массив данных, например в Интернет. Если Вы запустите сразу две задачи, то у вас будет путаница, например первый поток, еще не успеет заполнить массив, а второй отправит неполные данные.
среда, 29 сентября 2010 г.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 9
Группы задач
Еще одной интересной возможностью OTL – является возможность группировки фоновых задач. Работая с группой задач, программист может, используя интерфейс группы управлять всеми входящими в группу задачами.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 8
Завершение фоновых задач по событию.
Одной из интересных особенностей библиотеки OTL в плане управления временем жизни фоновой задачи является - завершение фоновой задачи по событию. Как вы знаете фоновую задачу можно завершить, используя метод Terminate. Однако есть еще один способ завершения фоновой задачи – способ завершения по событию. Для этого используется метод TerminateWhen с объектом IOmniCancellationToken.
вторник, 28 сентября 2010 г.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 7
Обработка ошибок в OTL.
Одной из важных особенностей разработки многопоточных приложений является правильная обработка ошибок в фоновых потоках. Многие из Вас сталкивались с тем, что созданный Вами фоновый поток вдруг внезапно завершает работу. Обычно и наиболее часто это вызвано ошибкой произошедшей в коде фонового потока. Библиотека OTL предлагает хороший механизм отслеживание ошибок в фоновых потоках.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 6
Обработка сообщений Windows в OTL.
Итак, в предыдущих разделах мы научились работать с сообщениями. Однако эти сообщения были заданы нами. В данном же разделе мы рассмотрим работу с сообщениями Windows, научимся перехватывать и обрабатывать их в фоновых задачах.
воскресенье, 26 сентября 2010 г.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 5
Реализация каналов связи между фоновыми задачами.
И так мы научились обмениваться сообщениями между фоновой задачей и основным потоком программы. А что делать, если мы захотим обменяться сообщениями между различными фоновыми задачами. Ответ прост - мы должны создать дополнительный канал связи используя систему связи OTL. Оговорюсь сразу, подробное рассмотрение системы связи OTL будет дано отдельно, здесь же речь пойдет так сказать о практической реализации.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 4
Двухсторонняя связь. Подход 2
В данном разделе мы уйдем от метода написания цикла ожидающего прихода событий (сообщений). Конечно, цикл никуда не денется, но он будет спрятан в самой библиотеке OTL на низком уровне, а если быть точным, то в модуле OtlTask.pas.
Для этого откроем демонстрационный пример tests\5_TwoWayHello_without_loop и посмотрим, как можно переделать наш предыдущий пример проще и красивей.
пятница, 24 сентября 2010 г.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 3
Двухсторонняя связь. Подход 1
Итак, в предыдущем разделе мы разобрались, как осуществлять одностороннюю связь между фоновой задачей (потоком) и основным потоком программы. Теперь мы разберемся, как с помощью OTL передавать сообщения и данные из основного потока программы в фоновые потоки, созданные CreateTask.
четверг, 23 сентября 2010 г.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 2
Односторонняя связь.
Конечно, для серьезных приложений этот тривиальный код не годится, но лиха беда начало. Далее мы рассмотрим пример, в котором происходит взаимодействие фонового потока с его владельцем. Для начала создадим одностороннуюю связь.
Использование OmniThread Libray (OTL) для создания многопоточных приложений - 1
Предисловие
В цикле заметок пойдет речь о создании приложений с использование библиотеки OmniThreadLibrary (http://otl.17slon.com/index.htm). Данная библиотека облегчает создание многопоточных приложений в среде Delphi и предоставляет программисту простые и гибкие возможности по работе с фоновыми задачами, чем стандартный класс TThread. Данная цикл заметок предоставляет из себя материал, взятый из официальной документации, блога автора библиотеки, комментарий читателей блога и своих наблюдений. Фактически мной произведена некоторая систематизация материала (библиотека находится в постоянной разработке и от версии к версии часто видоизменяется, поэтому официальная документация страдает пробелами и изъянами) и выполнено дополнительное комментирование некоторых частей официальной документации, где по-моему мнению не хватает более подробного материала.
вторник, 21 сентября 2010 г.
Пишем Jabber-клиент на Delphi. Часть 5
Статусы, состояния, информация о присутствии, управление подпиской <Presence>
Прием и отправка статусных сообщений, а также информации о видимости контактов и подписки на сообщения от них, осуществляется через XML-строфу <Presence>.
Атрибут type строфы <Presence> является дополнительным.
Строфа, которая не обладает атрибутом type, используется Jabber-ом, для сообщений о присутствии контакта в сети Jabber и указывает на то, что данный контакт находится в сети (онлайне) и доступен для коммуникации.
Если атрибут type присутствет в строфе <Presence>, то он управляет подпиской на сообщения и смену статусов другого контакта (объекта). Аналог подписки в IM-сетях является прохождение авторизации в ICQ.
четверг, 16 сентября 2010 г.
Пишем Jabber-клиент на Delphi. Часть 4
Базовые семантические модули
После того как мы прошли авторизацию, разберем основные базовые семантические модули XML-строф реализованных в протоколе, их довольно немного:
<Presence> - презентационные данные, определяют статусное состояние, видимость пользователей и управление подпиской.
<Message> - собственно сами сообщения переданные или принятые пользователем.
<IQ> - Info Query, данные информационных запросов, включают в себя сами запросы, а также результаты выполнения. Данные запросы позволяют Jabber-клиентам обменивается различными данными между собой. Информационное наполнение запроса и ответа определено в пространстве имен дочернего элемента. Дополнительные расширения протокола (XEP – XMPP Extension Protocol) очень сильно используют <iq> запросы. Подробнее об них я расскажу далее.
Пишем Jabber-клиент на Delphi. Часть 3
RFC 2831 использование MD5-Digest аутенфикации в SASL
Итак, аутенфикация решает следующие задачи: Передача пароля на сервер, в закрытом виде, защиту от повторяющихся атак (monitoring nc value), защиту (monitoring nonce) в определённый промежуток времени от определённого клиента. Для того, что бы понять, как работает данный стандарт, разберем основы SASL.
Пишем Jabber-клиент на Delphi. Часть 2
Подготовка
Сразу оговорюсь, что я не ставлю перед собой задачу написать полноценно работающий клиент соответствующий полному стандарту XMPP. Слишком большой труд, скажем так, однако основные методы работы с XMPP будут включены в мой исходный компонент.
В качестве основы для работы клиента мной были взяты наработки по работе с WinSock Alex-а Demchenko (alex@ritlabs.com), используемые им в TICQClient, немного портированные, кое-где измененные и дополнительно комментированные мной, для нашего демо-клиента.
В качестве парсера XML мной был взят TjanXMLParser2, благо он бесплатный, довольно быстрый. Стандартный парсер MSXML был мной отброшен по причине, того, что некоторые XML-пакеты приходили синтаксически неправильные, что начисто отрубало желание этого парсера работать с ними.
среда, 15 сентября 2010 г.
Пишем Jabber-клиент на Delphi. Часть 1
Введение
Jabber — система для быстрого обмена сообщениями и информацией о присутствии (в контакт-листе) между любыми двумя пользователями Интернета на основе открытого протокола XMPP.
В отличии от той же Аськи Jabber-сеть имеет на мой взгляд более развитые возможности, а наличие расширений протокола открывает горизонты функциональности на недосягаемые для коммерческих IM-сетей, вот некоторые из них:
Открытость: протокол Jabber открыт, общедоступен и достаточно лёгок для понимания; существует множество реализаций серверов и клиентов, а также библиотек с открытым исходным кодом.
Подписаться на:
Сообщения (Atom)