Hello:
客户端程序是多线程发送和接收数据其中Writeln和Readln分别采取了同步;
 Synchronize(Writeln)
  Synchronize(Readln)服务器端程序
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
   i:integer;
   sCommand:string;
begin
  //这里的FRecData,FWriteData 是外部的全局变量;
  //WriteSynData是一个窗体类中的过程,功能是把FRecData数据显示到TMemo控件上并把FRecData数据写入一个已经打开的文本文件中(Writeln(F,FRecData); Flush(F);)   if not AThread.Terminated and AThread.Connection.Connected then
   begin
      Try  
         sCommand := AThread.Connection.ReadLn;
         FRecData := sCommand+'-来自于主机PeerIP('+AThread.Connection.Socket.Binding.PeerIP+')PeerPort('+
                     IntToStr(AThread.Connection.Socket.Binding.PeerPort)+')';         AThread.Synchronize(WriteSynData);          FWriteData := ' OK:'+sCommand;
         AThread.Connection.WriteLn(FWriteData);      Finally
         //
      End;   end;
end; 问题:这里客户端程序在多台机器上运行时,服务器写入文件的数据会出现一条记录重复记录,而有的记录丢失现象,总记录数是对的;如果:sCommand改为FRecData时写给A客户端的数据会写给B客户端现象;
 
 我想:应该是全局变量FRecData和FWriteData的问题,AThread多线程会同时触发多个Execute事件同时执行,导致全局变量变化问题;可是不用全局变量又如何把FRecData数据传给WriteSynData过程,以及如何从WriteSynData过程返回执行结果数据呢?即把执行结果数据返回Writeln给对应客户端.请高手指教,