掲題の件についてご質問があります。
<環境>
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
ツイート | ![]() |