掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
リモートデータモジュール(多層サポート)でマルチスレッドを実現するには? (ID:18205)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
掲題の件についてご質問があります。 <環境> C/Sアプリ共通 Windows2000+Delphi7+DCOM ※三層構造を想定 <質問内容> 複数クライアントからの要求をサーバ側をマルチスレッドにして対応させようと、開発しています。 クライアントA、クライアントBの両方からサーバへ要求した場合、 クライアントAが終了するまでクライアントBが待機状態になってしまいます。 TComponentFactoryに指定しただけでは不十分ですか? 問題ないのであれば、どのタイミングでスレッドが生成されるのでしょうか? TThreadの情報はHPにあるんですけど・・・。 ご指南、ご指摘の程お願い致します。 ※ソース(サーバ側)は下記の通りです。 //SOURCE START-----> unit USVR_1; {$WARN SYMBOL_PLATFORM OFF} interface uses Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr, DBClient, StdVcl, FMTBcd, DB, SqlExpr, Provider, DBXpress; type TSVR_1 = class(TRemoteDataModule, ISVR_1) Provider1 : TProvider; Query1 : TSQLQuery; procedure GetDataBeforeGetRecords(Sender: TObject; var OwnerData: OleVariant); private FParam1: TString; FParam1: TString; protected class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override; procedure SetParam(AParam1, AParam2 : WideString); safecall; public { Public 宣言 } end; implementation {$R *.DFM} class procedure TSVR_1.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); begin if Register then begin inherited UpdateRegistry(Register, ClassID, ProgID); EnableSocketTransport(ClassID); EnableWebTransport(ClassID); end else begin DisableSocketTransport(ClassID); DisableWebTransport(ClassID); inherited UpdateRegistry(Register, ClassID, ProgID); end; end; //*****************************************************************// // パラメータ設定 //*****************************************************************// procedure TSVR_1.SetParam(AParam1, AParam2 : WideString); begin FParam1 := AParam1; FParam2 := AParam2; end; //*****************************************************************// // データ取得イベント //*****************************************************************// procedure TSVR_1.GetDataBeforeGetRecords(Sender: TObject; var OwnerData: OleVariant); var WkProvider: TProvider; WkQuery : TSQLQuery; begin WkProvider := Provider1; WkQuery := Query1; WkQuery.Close; WkQuery.SQL.Clear; WkQuery.SQL.Add('〜〜〜SQL文〜〜〜'); try try WkQuery.Open; WkProvider.DataSet := WkQuery; except on e1: Exception do begin //エラーログ出力 end; end; finally WkQuery.Close; end; end; initialization TComponentFactory.Create(ComServer, TSVR_1, Class_SVR1, tiInstance, tmFree); end. <-----SOURCE END
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.