使用socketconnection时遇到的奇怪问题 ( 积分: 200 )

  • 主题发起人 主题发起人 wirerjf
  • 开始时间 开始时间
W

wirerjf

Unregistered / Unconfirmed
GUEST, unregistred user!
我有段程序使用socketconnection连接进行数据处理的(代码如下),可能是由于
网络不稳定,如果数据处理操作的时间比较长(比如打印一个报表,rave.print),
在断开socketconntion连接时(这是我分析的)主程序有时就会无响应(只是有时,
跟踪抓不到现象),不知可有高手赐教,200分不够还可以再加。
var
theSocketConnection : TSocketConnection;
theFindClientData : TClientDataSet;
begin
theSocketConnection := TSocketConnection.Create(nil);
theFindClientData := TClientDataSet.Create(nil);
try
with theSocketConnectdo
begin
theSocketConnect.ServerGUID := '{XXXX-XXXX-XXXXXXXXXXX}';
theSocketConnect.Host := hostname;
theSocketConnect.Port := portnumber;
end;

with theFindClientDatado
begin
theClientDataSet.RemoteServer := theSocketConnect;
theClientDataSet.ProviderName := 'XXXXXXProvider';
end;

with theFindClientDatado
begin
active:=false;
commandtext:='';
try
commandtext:='select * from emp_inf';
active:=true;
//////////////////////////////////////
数据处理操作
///////////////////////////////////////

except
active:=false;
commandtext:='';
end;
end;

finally
theFindClientData.Active := false;
theFindClientData.commandtext := '';
theFindClientData.Close;
theFindClientData.Free;
if theSocketConnection.Connected then

theSocketConnection.Connected:=false;
theSocketConnection.Free;
end;
end;
 
同志们随便说说也行啊,困扰啊
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=939
 
我操,这个世界没有天理了~~~~~ MD,老虎不发威,当我是病猫, 先骂人的倒有理了 我可是从来不主动得罪人的 谁要是欺负人,那就不客气了 明天把这个工具开个源,叫大家都来用用 请问你们有什么拿的出手的?自己写的东西? 说出来叫大爷我长长见识? 别不会是一群耍嘴皮子的废物吧?
 
ysai的那个帖子我看了,是通过控制socketconnect的等待时间来解决问题,他也不知道有没有付作用,这个有些恐怖,我试试看,然后交作业,大家有什么其他方法的话,欢迎继续讨论
 
赶紧交一次期中作业,不然没信义了。
通过一个月的实际应用
将SConnect单元中
procedure TStreamedConnection.InternalClose;
begin
if Assigned(FTransport) then
begin
FTransport.OnTerminate := nil;
FTransport.Terminate;
PostThreadMessage(FTransport.ThreadID, WM_USER, 0, 0);
if Assigned(FTransport.FTransport) then
WaitForSingleObject(FTransport.Handle, 3000);//180000);//恐怖的3分钟改成3秒钟,具用户反应情况良好,在网络不稳定的情况下没有出现程序无响应的情况
FTransport := nil;
end else
if Assigned(FTransIntf) then
begin
FTransIntf.Connected := False;
FTransIntf := nil;
end;
end;
ysai同志先别急,我再找找理论依据,给大家一个圆满答案
 
接受答案了.
 
后退
顶部