IDTcpClient线程接收的问题(90分)

  • 主题发起人 主题发起人 tswhq
  • 开始时间 开始时间
T

tswhq

Unregistered / Unconfirmed
GUEST, unregistred user!
客户端
...
TReadThread = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
Public
constructor Create(Suspended:Boolean);
end;
...
var
Form1 :TForm1;
User :Users;
ChatBuffer :ChatBuffers;
ReadThread :TReadThread;
...
procedure TForm1.ClientConnected(Sender: TObject);
begin
Memo.Lines.Add(TimeToStr(Time)+' 登录成功!');
ReadThread:=TReadThread.Create(False);
end;

//**********************************************************
//
// 线程部分
//
//**********************************************************
constructor TReadThread.Create(Suspended: Boolean);
begin
inherited Create(Suspended);
end;

procedure TReadThread.Execute;
var
F:ConnectMark;
begin
while Form1.Client.Connected do
begin
Form1.Client.ReadBuffer(F,SizeOf(F));
case F of
Chat:
begin
Form1.Client.ReadBuffer(ChatBuffer.Buffer,SizeOf(ChatBuffer.Buffer));
Form1.Memo.Lines.Add(ChatBuffer.Buffer);
end;
end;
Sleep(300);
end;
end;
程序在编译器里调试运行时功能正常,但过大约10秒后抱错'read timeout',
直接运行EXE文件时功能正常,但过大约10秒后抱错'connection closed garcefully'
 
id经常出现这样的问题。
 
在recv的时候加上Try Except就好了。。编译器也不会报错。
不过10061 10053仍然会报的~
 
TIdPeerThread继承自TThread 看看TThread VCL不支持线程 所以onExecute不要出现界面显示。如果需要最好用同步函数。
 
还有没有新的提示?要不就结帖了(180分)
 
我也遇到类似问题.
我直接继承TIdTCPClient,在里面加了个线程,设置时间间隔来读取消息。
不仅Readln时出现异常,就连连接TIdTCPServer时TIdTCPServer也出现异常。
 
线程执行函数:
CoInitialize(nil);
try
//你要执行的代码
except
end;
CoUninitialize();
 
再看看超时值设置了多少?
 
对拉
使用CoInitialize(nil)时uses activex
 
使用CoInitialize(nil)时uses activex?
什么意思,能再人解释一下吗?
 
多人接受答案了。
 
后退
顶部