多线程双向通讯(100分)

  • 主题发起人 主题发起人 笨笨
  • 开始时间 开始时间

笨笨

Unregistered / Unconfirmed
GUEST, unregistred user!
我用TServerSocket做多线程通讯,客户端连接上来后产生TServerClientThread线程接收客户端数据,在主进程中用ServerSocket.Socket.Connections.SendText('01'+chr($00)+chr($03)+#27'TS')发送指令到客户端,发现速度很慢,整个程序停滞一段时间,而且有时线程在循环中就已经结束,发送就出现错误。是不是应该通过线程向客户端发送?如何得到产生的TServerClientThread并通过线程的ClentSocket发送????
 
提个建议:为什么不用indy?
 
to jian1:用indy就不会遇到这样的问题吗:
我想我不应该用ServerSocket.Socket.Connections.SendText('aaa')的方式发送指令,
而应该用SomeThread.ClientSocket.SendText('aaa')的方式发送指令,但是我如何得到现在正在运行的所有线程呢?
 
var
ThreadList:TList;

procedure TForm1.FormCreate(Sender: TObject);
begin
ThreadList:=TList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ThreadList.Free;
end;

procedure TForm1.ServerSocket1ThreadStart(Sender: TObject;
Thread: TServerClientThread);
begin
ThreadList.Add(Thread);
end;

procedure TForm1.ServerSocket1ThreadEnd(Sender: TObject;
Thread: TServerClientThread);
begin
ThreadList.Remove(Thread);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
I:Integer;
Thread:TServerClientThread;
begin
for I:=0 to ThreadList.Count-1 do
begin
Thread:=TServerClientThread(ThreadList.Items);
...
end;
end;
 
接受答案了.
 
慢了半拍,呵呵。给smokingroom老兄抢了先机
 
后退
顶部