多线程.txt

来自「如何在Delphi下实现画面捕捉、传输、以及文件的传输原理」· 文本 代码 · 共 57 行

TXT
57
字号
它区分客户端A或B是要用到多线程的。
type
   PClient =^TClient;
   TClient = Record
        DNS:String[20];
        IP: String[20];
        Thread:Pointer;
   end;
var
   Clients:TThreadList;
procedure TInforServer.IdTCPServer1Connect(AThread: TIdPeerThread);
var
   NewClient:PClient;
begin
    New(NewClient);

    NewClient^.IP:=AThread.Connection.Socket.Binding.PeerIP;
    NewClient^.Thread:=AThread;

    AThread.Data:=TObject(NewClient);
    try
        Clients.LockList.Add(NewClient);
    finally
        Clients.UnlockList;
    end;
end;

procedure TInforServer.IdTCPServer1Disconnect(AThread: TIdPeerThread);
var
    ActClient:PClient;
begin
    ActClient:=PClient(AThread.Data);
    try
        Clients.LockList.Remove(ActClient);
    finally
        Clients.UnlockList;
    end;
    dispose(ActClient);
    AThread.Data:=nil;
end;


//停止多线程发送
  while(index <= count)do
  begin
    if FDataThread[index]<>nil then
    begin
      FDataThread[index].Terminate;
      FDataThread[index].WaitFor;
      TransServer.ShowMsg(clBlue,'向客户端输出第%d线程已停止!ThreadId=%d,发送条数=%d,接收应答条数=%d',
          [index,FDataThread[index].ThreadID,SndNum[index],RecvNum[index]]);
      FDataThread[index].Free;
      FDataThread[index] := nil;
    end;
    inc(index);
  end;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?