Есть событие TServerSocket-a OnClientRead
type
TSendStreamParam = record
Socket: TCustomWinSocket;
Stream: TStream;
end;
var
SendStreamParam: TSendStreamParam;
SendStreamCriticalSection: TCriticalSection;
procedure TMain.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Stream: TStream;
begin
...
SendStream(Socket,Stream);
...
SendStream(Socket,Stream);
...
Socket.Close;
Socket.Free;
end;
procedure SendStream(Socket: TCustomWinSocket; Stream: TStream);
var
c: Cardinal;
begin
SendStreamParam.Socket := Socket;
SendStreamParam.Stream := Stream;
BeginThread(nil,SizeOf(SendStreamParam),@SendS,@SendStreamParam,0,c);
end;
procedure SendS(Par: Pointer);
var
i: integer;
buff: array[0..65536] of byte;
p: ^TSendStreamParam;
Socket: TCustomWinSocket;
begin
try
SendStreamCriticalSection.Enter;
try
p := Par;
p.Stream.Position:=0;
repeat
i:=p.Stream.Read(buff,SizeOf(buff));
while p.Socket.SendBuf(buff,i)=-1 do
until i=0;
p.Stream.Free;
except
end;
finally
SendStreamCriticalSection.Leave;
end;
end;
Однако к тому времени когда последний(дочерний) поток начинает отправлять данные через сокет основной поток этот сокет уже закрывает. Как разрешить ситуацию?