我做的NT服务老是死掉,请大家帮忙看看。谢谢,一定给分!(100分)

  • 主题发起人 主题发起人 fengyuyang
  • 开始时间 开始时间
F

fengyuyang

Unregistered / Unconfirmed
GUEST, unregistred user!
我用TIdTCPServer来接收客户断传上来的数据,可用一段时间后就死掉了,代码如下,个人感觉是线程的问题,请大家帮我看看。
procedure TService1.TCPServerConnect(AThread: TIdPeerThread);
begin
if OraSession1.Connected=False then
OraSession1.Connected:=True;
end;

procedure TService1.TCPServerExecute(AThread: TIdPeerThread);
var
ReadStatus:string;
fs:TFileStream;
StringList:TStrings;
SQLStatement:string;
FSize:Longint;
RGShopCode,RGPWD,FACTPWD:string;
TempADOQry: TOraQuery;
begin
with AThread.Connectiondo
begin
try
TOraQuery1 := TOraQuery.Create(TOraQuery);
except
Exit;
end;

数据库处理……
end;
end;
 
在线等待,请帮忙看看!
 
真没人帮帮我吗?
 
我也正被线程烦着呢[:(]
 
我觉得在TCPServerExecute应先进行数据接收判断,等到数据帧收完整后再调用另一过程将数据帧加入数据库,即:

procedure TService1.TCPServerExecute(AThread: TIdPeerThread);
begin
with AThread.Connectiondo
begin
...
if not RecvClientData(sFrame) then
Exit;//数据接收判断
FLFrame.Add(sFrame);//FLFrame线程的private变量
end;

if 可以进行数据库处理了 then

Synchronize(SaveData);
end;

procedure TService1.SaveData;
begin
try
TOraQuery1 := TOraQuery.Create(TOraQuery);
except
Exit;
end;

对FLFrame中的各数据帧进行数据库处理……
end;
 
to:labelsoft
应该不是你说的情况,
因为我实际从客户端接收的是一个压缩文件,
压缩文件接收完毕后,进行解压缩,形成若干文本文件,
然后再依次打开文本文件,将数据写入数据库。
 
在这似乎没看到 Query的释放过程
 
释放了,只是没写。
 
我写过一个接受数据的服务器端和客户端的,刚开始也有死掉的情况的,后来发现是线程处理有问题,我看你最好先不用服务的,写了测试行了,再改为服务就对了.
 
后退
顶部