Подтвердить что ты не робот

Delphi - Резьбовые каркасы

Я ищу фреймворк Threading для использования в моем приложении Delphi.

В настоящее время я оцениваю " OmniThreadLibrary - пока он выглядит хорошо и делает все, что мне нужно.

Есть ли еще какая-нибудь "инфраструктура Threading для Delphi?

(Я использую D2006 и D2009)

4b9b3361

Ответ 1

В соответствии с предложением Vegar

Основываясь на моих часах оценки OmniThreadLibrary

Вот некоторые из вещей, которые мне нравятся

1) Прост в использовании

2) Он скрывает большинство деталей о многопоточности

3) С помощью нескольких строк кода вы можете настроить несколько потоков

4) Легко выполнять сообщения межпроцессного процесса

5) Он все еще активно развивается

Ответ 2

Не является основой как таковой, но там AsyncCalls. Его область отличается от OmniThreadLibrary, но также поддерживает более старые версии Delphi.

Ответ 3

Internet Direct (Indy) содержит типы данных IdThread и потокобезопасные данные в IdThreadSafe.pas:

* TIdThreadSafeInteger
* TIdThreadSafeBoolean
* TIdThreadSafeString
* TIdThreadSafeStringList 

... и еще несколько

Библиотека кода Jedi (JCL) также включает в себя классы и функции синхронизации (около десяти классов)

Ответ 4

Я развиваю свою собственную обширную инфраструктуру потоков, которая также интегрирована с аналогичной архитектурой коммуникаций за последние 10 лет. На этом этапе он может использоваться с Delphi 2005-2007, но скоро будет доступен для Delphi 2009-2010. Эта инфраструктура разработки приложений может использоваться для создания широко распределенных систем, поскольку она предназначена для того, чтобы любые потоки выполнялись в любом процессе и использует простой протокол передачи потоков, который является тем же самым, независимо от того, находятся ли потоки в одном процессе или в разных процессах на разных машинах.

В качестве дополнительной функции у меня есть эта среда, которая теперь работает в С#/Visual Studio, поэтому распределенная система, построенная с использованием этой структуры, может иметь сочетание приложений Win32 и .NET, использующих ту же методологию проектирования. Рамку можно загрузить из http://www.adug.org.au/downloads/CSIFramework.html

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

Помимо Delphi, используемые библиотеки:

  • Indy (входит в состав Delphi, хотя я использую последнюю версию до юникода)
  • JEDI JCL
  • Turbopower Abbrevia
  • XML tidy library (необязательно)
  • библиотека абстракции базы данных (необязательно)

Я изменил некоторые периферийные блоки Delphi 1), чтобы исправить утечку памяти в открытой реализации XML в Delphi 2006 (впоследствии исправленную в более поздних версиях Delphi), 2) интегрировать приложение-службу с моей системой ведения журнала и 3) интегрируйте автономный SOAP-сервер с Indy 10 (а не Indy 9, как в Delphi 2006).

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

Эта структура была расширена за счет включения серверов и клиентов связи и основного потока GUI, чтобы иметь точно такой же интерфейс обмена сообщениями, что и потоковые очереди, поэтому отправка сообщения в удаленный процесс или передача его в графический интерфейс тот же синтаксис, что и между потоками. Структура была разработана таким образом, что нет необходимости вообще знать что-либо о многопоточной разработке для создания распределенной системы, развернутой для нескольких процессов и нескольких потоков.

В рамках этой структуры гораздо больше, чем в этом, и я поставил перед собой более двух лет усилия по разработке этого за последние 10 лет. Он был успешно развернут в многоуровневой системе мониторинга тревог (используя более 20 различных классов потоков в трех приложениях), и в настоящее время я создаю распределенную систему в Visual Studio 2008 с использованием этой структуры.

Короче говоря, если все, что вам нужно, это простая структура потоков, то это, вероятно, слишком велико. Однако, если вы хотите разработать сложную многопоточную систему, которая может охватывать несколько приложений, тогда кривая обучения может стоить того.

PS Еще несколько моментов:

  • Включение и завершение загрузки всех фреймворков (без необходимости писать код для этого)
  • Потоки, составляющие приложение (число и конфигурация), определены в файле конфигурации XML, а не в самом коде (нет необходимости писать какой-либо код для включения их в приложение).
  • Если вы используете компонент абстракции базы данных, то доступ к многопоточной базе данных автоматически доступен (дополнительный код не требуется)
  • В настоящее время я работаю над добавлением пула потоков, который позволит любой очереди с потоком иметь определенное количество созданных потоков (опять же, не нужно писать какой-либо код для этого)
  • Существует простое руководство разработчика, которое вы можете загрузить с веб-страницы, которое также включено в загрузку структуры, которая дает обзор структуры с точки зрения разработчика.
  • Сама инфраструктура находится в очень активной разработке, а со следующей версией Delphi я надеюсь, что версия, работающая на Win32 (под Delphi), версия .NET(С#/Visual Studio) и версия Linux (используя новый кросс-платформенный компилятор Deplhi)