统计客户数的问题 ( 积分: 20 )

  • 主题发起人 主题发起人 靴子
  • 开始时间 开始时间

靴子

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做三层数据库时:
1、如果远程模块中的代码是这样的
implementation
uses unit1;
{$R *.DFM}
class procedure Tzhao.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 Tzhao.RemoteDataModuleCreate(Sender: TObject);
begin
form1.UpdateClientCount(1);//是在form1中写的一个过程
end;

initialization
TComponentFactory.Create(ComServer, Tzhao,
Class_zhao, ciMultiInstance, tmApartment);
end.

则当启动客户端时,就是启动不起来;
其中UpdateClientCount是这样的
FClientCount在
private
FClientCount: Integer;
声明的
procedure TForm1.UpdateClientCount(Incr: Integer);
begin
FClientCount := FClientCount + Incr;
Label1.Caption := IntToStr(FClientCount);
end;

2、如果把远程代码写成
implementation
uses unit1;
{$R *.DFM}
class procedure Tzhao.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 Tzhao.RemoteDataModuleCreate(Sender: TObject);
begin
form1.UpdateClientCount(1);
end;

initialization
TComponentFactory.Create(ComServer, Tzhao,
Class_zhao, ciMultiInstance);
end.

这个的就没问题
就是把tmApartment从initialization
TComponentFactory.Create(ComServer, Tzhao,
Class_zhao, ciMultiInstance,tmApartment);去掉就正常了啊。
请问大侠这是什么原因呢?
3。如果我用1的方法?难道UpdateClientCount不能写在 远程模块中的oncreat中吗?
 
我在做三层数据库时:
1、如果远程模块中的代码是这样的
implementation
uses unit1;
{$R *.DFM}
class procedure Tzhao.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 Tzhao.RemoteDataModuleCreate(Sender: TObject);
begin
form1.UpdateClientCount(1);//是在form1中写的一个过程
end;

initialization
TComponentFactory.Create(ComServer, Tzhao,
Class_zhao, ciMultiInstance, tmApartment);
end.

则当启动客户端时,就是启动不起来;
其中UpdateClientCount是这样的
FClientCount在
private
FClientCount: Integer;
声明的
procedure TForm1.UpdateClientCount(Incr: Integer);
begin
FClientCount := FClientCount + Incr;
Label1.Caption := IntToStr(FClientCount);
end;

2、如果把远程代码写成
implementation
uses unit1;
{$R *.DFM}
class procedure Tzhao.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 Tzhao.RemoteDataModuleCreate(Sender: TObject);
begin
form1.UpdateClientCount(1);
end;

initialization
TComponentFactory.Create(ComServer, Tzhao,
Class_zhao, ciMultiInstance);
end.

这个的就没问题
就是把tmApartment从initialization
TComponentFactory.Create(ComServer, Tzhao,
Class_zhao, ciMultiInstance,tmApartment);去掉就正常了啊。
请问大侠这是什么原因呢?
3。如果我用1的方法?难道UpdateClientCount不能写在 远程模块中的oncreat中吗?
 
不能,可能用一个全局变量保存连接数,然后向主窗体发消息,主窗体显示全局变量的值就可以了,tmApartment不能直接访问主窗体.
 
用第一种方法我这里忽然可以了啊,但是问题出来了,最多只能有9个用户。多了之后就处于死机的状态。我把FClientCoun放到那里也不行。我只能把我的哪个函数放到别的地方出发了。
原因还不知道
 

Similar threads

后退
顶部