суббота, 5 ноября 2011 г.

Полезняшки: Всплывающие информационные окна

Добрый день!

Сегодня поговорим о полезняшках в нашей професии программиста. Одной из таких полезняшек для меня стали всплывающие информационные окна, наподобие тех что есть в QIP-e.
Вообще предыстория этих окон следующая, в одном моем проекте понадобились всплывающие окна, да не просто всплывающие а поддерживающие следующую функциональность:
  • наличие кнопок-ответов
  • возможность задания кнопки по умолчанию
  • возможность автонажатия кнопок по истечению некоторого времени с отображением таймера обратного отчета
  • группировка окон, заключающаяся в том, что при появлении нового всплывающего окна, оное окно не перекрывала существующие, а при удалении окна с экрана, окна текущие сортировались в некий порядок.
  • раскраска окна по ситуации - "стандартное", "информационное", "окно сообщения об ошибке" и.т.д
  • возможность одновременного закрытия всех окон
  • возможность перетаскивания окон и изменения размеров
ну и прочие мелкие полезняшки.

среда, 20 июля 2011 г.

Вышла новая версия OmniThreadLibrary 2.1

Вышла новая версия OmniThreadLibrary 2.1

Скачать ее можно либо тут  либо с официального SVN проекта.

Вкратце, что появилось нового:

Добавлена поддержка исключений в методы Parallel.Future и Parallel.Join. так как эти методы претерпели существенные изменения, существует опасность проблем с ранее написанным кодом. Прежде, чем устанавливать новую версию проверьте history.txt и документацию в OtlParallel.pas для дополнительной информации по совместимости.

Вы также с выходом новой версии получаете полную UML диаграмму классов и методов OTL.

Добавлены новые демонстрационные примеры:
  • 43_InvokeAnonymous: - пример использования метода IOmniTaskControl.Invoke и IOmniTask.Invoke.
    44_Fork-Join QuickSort: - пример реализации быстрой сортировки QuickSort используя Parallel.ForkJoin.
    45_Fork-Join max: Выбор максимального элемента в массиве используя Parallel.ForkJoin.
    46_Async: Демо
    для Parallel.Async.
    47_TaskConfig: Демо для Parallel.TaskConfig.
     

четверг, 23 июня 2011 г.

Использование OmniThread Libray 2.0 (OTL 2.0) для создания многопоточных приложений. Настройка фоновых задач в OTLParallel

Простота параллелизма высокоуровневых фоновых задач библиотеки OmniThreadLibrary (модуль OtlParallel) проявляется при управлении несколькими частями независимого кода. Это хорошо показано в предыдущей части.
Однако при такой высокоуровневой обработке фоновых задач необходимы инструменты, позволяющие настраивать и регулировать эти задачи. Одним из примеров настройки является общение фоновой высокоуровневой задачи с главным потоком программы (основным потоком).
Ранее взаимодействие между фоновыми задачами и основным потоком программы, ложилось на плечи каналов связи, которые мы рассматривали ранее. Приходилось реализовать такие каналы вручную или опускаясь на низкий уровень блиотеки работать с CreateTask.
Однако начиная с выпуска 910, OtlParallel содержит намного более простой способ создания фоновых задачи и настройки их для коммуникации с владельцем (сиречь основным потоком программы).

среда, 4 мая 2011 г.

Коллекции во внешнем COM-сервере. Простое решение.

Добрый день дорогие коллеги!

В этой заметке пойдет речь о создании внешнего COM-сервера и реализации в нем простой коллекции. Что я подразумеваю под коллецией. Под ней я подразумеваю,то что некий COM сервер имеет грубо говоря некий набор данных к которым нужно получить доступ. А так как набор данных может быть разным то нужно предоставить пользователям возможность получать эти данные проходом по коллеции. Классическим примером может служить COM-сервер MS Excel который предоставляет пользователям коллецию рабочих листов IWorkSheet. Что-то подобное в простом решении мы сейчас и реализуем.

понедельник, 18 апреля 2011 г.

Использование OmniThread Libray 2.0 (OTL 2.0) для создания многопоточных приложений. Простые фоновые задачи в OTLParallel

Ранее мы рассматривали создание параллельных задач всегда в контектсте использования CreateTask. Однако для простых задач, можно использовать новую особенность библиотеки а именно - Parallel.Async.
Короче говоря, Parallel.Async принимает анонимные методы, обычный метод или процедуру (все они должны быть без параметров) и выполняет его в фоновом потоке. Вот и все чудеса. Для простых фоновых задач это уже подспорье. Отпадает нужда в вызове CreateTask.

вторник, 22 марта 2011 г.

Использование OmniThread Libray 2.0 (OTL 2.0) для создания многопоточных приложений - 7

Очередь выходных данных и исходящие буферы
В предыдущих частях мы немного разабрались с внутренним механизмом работы Parallel ForEach. В этой части мы разберемся с очередью выходных даных. В OTL она представлена модификатором .PreserveOutput.
Очередь выходных данных, как правило, используются вместе с .Into- модификатором. Причина этого кроется в обеспечении интеграции между параллельной инфраструктурой и вашим параллельный кодом. Тем кодом, который выполняется в качестве задачи в Parallel.ForEach.
В обычной конструкции ForEach, выход из параллельной задачи не определен.
Вы имеете право делать все, что вам угодно с каждым элементом параллельного цикла, выводить какие-либо результаты (в случае, если нужно) в рамках работы с элементом, но параллельные потоки, выполняющиеся в рамках распараллеливания цикла ничего знать об этом не будут.