A
agang007
Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TFrmMain.TmgetqqTimer(Sender: TObject);
var
QQinfogetlevariant;
Contrinfo:variant;
last:variant;
rsult:variant;
NI,j:integer;
QQgetdid:integer;
sta:string;
begin
try
tmgetqq.Enabled :=false;
StatusBar1.Panels[1].Text:=FormatDateTime('"时间:"yyyy"年"m"月"dd"日 "hh:nn',Date+Time);
QQgetdid:=0;
if CancelQQget=1 then
begin
tmgetqq.Enabled :=false;
exit;
end;
inc(QQGetNum);
with dmdo
begin
NI:=0;//lzm
// for NI:=0 to 3do
while NI<=3do
begin
if CancelQQget=1 then
begin
tmgetqq.Enabled :=false;
exit;
end;
//Inc(NI);
QQinfoget:=null;
Contrinfo:=null;
last:=null;
rsult:=null;
QQgetdid:=dids[NI];
sta:=stationname1[NI];
application.ProcessMessages;
sckcon.AppServer.QQGet(QQgetdid,QQinfoget,rsult);
if rsult=1 then
begin
if VarIsArray(QQinfoget) then
begin
for j:=VarArrayLowBound(QQinfoget,1) to VarArrayHighBound(QQinfoget,1)do
begin
if QQinfoget[j]<>'' then
frmqq.memorec.Lines.Add(sta+':'+QQinfoget[j]);
end;
frmqq.Status.Panels[0].Text :='数据接收成功';
if frmqq.Visible <> true then
frmqq.Show ;
end;
end;
application.ProcessMessages;
sckcon.AppServer.ContrlStrGet(QQgetdid,Contrinfo,last);
if last=1 then
begin
if Contrinfo<>'' then
begin
if Contrinfo='notallow' then
application.MessageBox(pchar(sta+' 不同意修改参数'),'控制系统',mb_ok);
if Contrinfo='allow' then
application.MessageBox(pchar(sta+' 同意修改参数'),'控制系统',mb_ok);
end;
{if VarIsArray(Contrinfo) then
begin
for j:=VarArrayLowBound(Contrinfo,1) to VarArrayHighBound(Contrinfo,1)do
begin
if Contrinfo[j]<>'' then
begin
if Contrinfo[j]='notallow' then
application.MessageBox(pchar(sta+' 不同意修改参数'),'中心控制系统',mb_ok);
if Contrinfo[j]='allow' then
application.MessageBox(pchar(sta+' 同意修改参数'),'中心控制系统',mb_ok);
end;
end;
end;
}
end;
Inc(NI);
end;
tmgetqq.Enabled :=true;
end;
except
inc(QQGetNum);
tmgetqq.Enabled :=true;
exit;
end;
end;
上面是我在客户端调用服务器上的方法,timer隔2秒触发一次,
但是3-4个小时之后会跳出内存访问错误。不知道原因,出错在客户端
说明服务器端定义方法应该没有问题。
var
QQinfogetlevariant;
Contrinfo:variant;
last:variant;
rsult:variant;
NI,j:integer;
QQgetdid:integer;
sta:string;
begin
try
tmgetqq.Enabled :=false;
StatusBar1.Panels[1].Text:=FormatDateTime('"时间:"yyyy"年"m"月"dd"日 "hh:nn',Date+Time);
QQgetdid:=0;
if CancelQQget=1 then
begin
tmgetqq.Enabled :=false;
exit;
end;
inc(QQGetNum);
with dmdo
begin
NI:=0;//lzm
// for NI:=0 to 3do
while NI<=3do
begin
if CancelQQget=1 then
begin
tmgetqq.Enabled :=false;
exit;
end;
//Inc(NI);
QQinfoget:=null;
Contrinfo:=null;
last:=null;
rsult:=null;
QQgetdid:=dids[NI];
sta:=stationname1[NI];
application.ProcessMessages;
sckcon.AppServer.QQGet(QQgetdid,QQinfoget,rsult);
if rsult=1 then
begin
if VarIsArray(QQinfoget) then
begin
for j:=VarArrayLowBound(QQinfoget,1) to VarArrayHighBound(QQinfoget,1)do
begin
if QQinfoget[j]<>'' then
frmqq.memorec.Lines.Add(sta+':'+QQinfoget[j]);
end;
frmqq.Status.Panels[0].Text :='数据接收成功';
if frmqq.Visible <> true then
frmqq.Show ;
end;
end;
application.ProcessMessages;
sckcon.AppServer.ContrlStrGet(QQgetdid,Contrinfo,last);
if last=1 then
begin
if Contrinfo<>'' then
begin
if Contrinfo='notallow' then
application.MessageBox(pchar(sta+' 不同意修改参数'),'控制系统',mb_ok);
if Contrinfo='allow' then
application.MessageBox(pchar(sta+' 同意修改参数'),'控制系统',mb_ok);
end;
{if VarIsArray(Contrinfo) then
begin
for j:=VarArrayLowBound(Contrinfo,1) to VarArrayHighBound(Contrinfo,1)do
begin
if Contrinfo[j]<>'' then
begin
if Contrinfo[j]='notallow' then
application.MessageBox(pchar(sta+' 不同意修改参数'),'中心控制系统',mb_ok);
if Contrinfo[j]='allow' then
application.MessageBox(pchar(sta+' 同意修改参数'),'中心控制系统',mb_ok);
end;
end;
end;
}
end;
Inc(NI);
end;
tmgetqq.Enabled :=true;
end;
except
inc(QQGetNum);
tmgetqq.Enabled :=true;
exit;
end;
end;
上面是我在客户端调用服务器上的方法,timer隔2秒触发一次,
但是3-4个小时之后会跳出内存访问错误。不知道原因,出错在客户端
说明服务器端定义方法应该没有问题。