12

Delphiアプリケーションで使用するスレッドフレームワークを探しています。

現在、私は「<a href="http://otl.17slon.com/index.htm" rel="nofollow noreferrer"> OmniThreadLibrary」を評価しています。これまでのところ、見栄えがよく、必要なすべてを実行しています。

Delphi用の他の「スレッドフレームワーク」はありますか?

(私はD2006とD2009を使用しています)

4

4 に答える 4

7

フレームワーク自体ではありませんが、AsyncCallsがあります。そのスコープはOmniThreadLibraryとは異なりますが、古いバージョンのDelphiもサポートしています。

于 2009-03-22T07:12:24.197 に答える
4

Internet Direct(Indy)には、IdThreadSafe.pasにIdThreadおよびスレッドセーフのデータ型が含まれています。

* TIdThreadSafeInteger
* TIdThreadSafeBoolean
* TIdThreadSafeString
* TIdThreadSafeStringList 

...そしてもっと

Jediコードライブラリ(JCL)には、同期クラスと関数(約10クラス)も含まれています。

于 2009-03-22T07:14:10.853 に答える
2

私は過去 10 年間、同様に設計された通信フレームワークとも統合された独自の拡張スレッド フレームワークを開発してきました。この段階では、Delphi 2005-2007 で使用できますが、まもなく Delphi 2009-2010 で使用できるようになります。このアプリケーション開発フレームワークは、任意のスレッドを任意のプロセスで実行できるように設計されており、スレッドが同じプロセスにあるか異なるプロセスにあるかにかかわらず同じ単純なスレッド通信プロトコルを使用するように設計されているため、大規模な分散システムの構築に使用できます。異なるマシンで。

追加機能として、このフレームワークを C#/Visual Studio で実行できるようになったため、このフレームワークを使用して構築された分散システムは、すべて同じ設計手法を使用して Win32 アプリケーションと .NET アプリケーションを混在させることができます。フレームワークはhttp://www.adug.org.au/downloads/CSIFramework.htmlからダウンロードできます。

私のフレームワークで使用されているライブラリは、サイトに表示されているほど広範囲ではありません (そのページを書き直したばかりですが、更新されるまでに 1 日ほどかかる場合があります)。さらに、必要なすべてのファイル (データベース抽象化レイヤーを除く) がフレームワークに含まれているため、フレームワークを使用するためにサードパーティ ライブラリをインストールする必要はありません。

Delphi 以外で使用されるライブラリは次のとおりです。

  • Indy (Delphi に含まれていますが、最新の pre-unicode バージョンを使用しています)
  • ジェダイJCL
  • ターボパワー アブレビア
  • XML tidy ライブラリ (オプション)
  • データベース抽象化ライブラリ (オプション)

周辺の Delphi ユニットをいくつか変更しました。1) Delphi 2006 のオープン XML 実装でのメモリ リークを修正し (その後、後の Delphi バージョンで修正されました)、2) サービス アプリケーションをロギング フレームワークに統合し、3) スタンドを統合しました。 -Indy 10 を使用した単独の SOAP サーバー (Delphi 2006 に含まれている Indy 9 ではありません)。

実際には、私のフレームワークは単なるスレッド フレームワークではありませんが、スレッド フレームワークはその一部です。スレッド化フレームワークは、すべてのスレッドをスレッド化されたキューとして実装することによって構築されます。スレッド化されたキュー間で渡される「メッセージ」は、実際には汎用の型付きオブジェクトにパッケージ化されたデータです。これにより、あらゆる方法で構造化されたデータをスレッド間で完全に渡すことができます。メッセージを追加することで非同期的に、またはメッセージを追加して応答としてメッセージを受信することで、スレッド間でメッセージを渡すことができます。スレッド自体はメッセージを受信するために他のスレッドにサブスクライブするため、設計時にスレッド間の結合はありません。

このフレームワークは、通信サーバーとクライアント、およびメインの GUI スレッドを含むように拡張されており、スレッド化されたキューとまったく同じメッセージング インターフェイスを備えているため、メッセージをリモート プロセスに送信したり、GUI に渡したりする際に同じ構文が使用されます。スレッド間で使用されるものとして。このフレームワークは、マルチスレッド開発について何も知らなくても、複数のプロセスと複数のスレッドに展開される分散システムを構築できるように設計されています。

このフレームワークにはこれ以外にも多くの機能があり、私は過去 10 年間でこれを開発するために 2 年以上の努力をしてきました。多層アラーム監視システム (3 つのアプリケーションで 20 を超える異なるクラスのスレッドを使用) に正常に展開されており、現在、このフレームワークを使用して Visual Studio 2008 で分散システムを構築しています。

要するに、シンプルなスレッド化フレームワークだけが必要な場合、これはおそらくやり過ぎです。ただし、複数のアプリケーションにまたがる可能性のある複雑なマルチスレッド システムを開発する場合は、学習曲線を使用する価値があります。

PSその他のいくつかのポイント:

  • スレッドの起動とシャットダウンはすべてフレームワークによって処理されます (これを行うためのコードを記述する必要はありません)。
  • アプリケーションを構成するスレッド (数と構成) はすべて、コード自体ではなく、XML 構成ファイルで定義されます (アプリケーションにスレッドを含めるためのコードを記述する必要はありません)。
  • データベース抽象化コンポーネントを使用すると、マルチスレッド データベース アクセスが自動的に利用可能になります (追加のコードは必要ありません)。
  • 私は現在、スレッド化されたキューが指定された数のインスタンス化されたスレッドを持つことを可能にするスレッドプーリングの追加に取り組んでいます (繰り返しますが、これを行うためのコードを書く必要はありません)。
  • 開発者の観点からフレームワークの概要を説明するフレームワークのダウンロードに含まれている Web ページからダウンロードできる簡単な開発者ガイドがあります。
  • フレームワーク自体は非常に活発に開発されており、Delphi の次のリリースでは、Win32 で動作するバージョン (Delphi の下)、.NET バージョン (C#/Visual Studio)、および Linux バージョン (新しい Deplhi を使用) を期待しています。クロスプラットフォーム コンパイラ)
于 2009-10-23T07:23:39.410 に答える