procedure TForm1000.UDPServerUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
outlength,I: integer;
Inlog, Outlog: array [0..2048] of char;
Outtype, Outfile: array [0..256] of char;
NumberBytes: Integer;
//LogType,LogName,TdsName: string;
begin
try
AData.ReadBuffer(inlog,AData.Size);
NumberBytes:= AData.Size;
Outlength:=NSDecodeLog(Inlog, NumberBytes, Outtype, Outfile, Outlog);//가공함수
TdsName:= ABinding.PeerIP;
Memo2.Lines.Add(Outlog);
LogOut:= Outlog;
LogType:= Outtype;
LogType_Gubun(TdsName,LogType,Outlog);
except
//
end;
end;
LogType_Gubun(TdsName,LogType,Outlog);//이함수가 처리하기전에
데이타가 들어와 이함수를 다시 호출합니다 ( 데이타는 계속 받아야 하구요..)
해결방법이 없을까요?
1. 순차적 처리를 원한다면 CriticalSection을 전역으로 사용하여
처리를 보장해 주는 방법입니다.
Cricical.Enter;
try
처리 코드
finally
Critical.Leave;
end;
2. 기다리는 시간을 줄여야 하고, 트래픽이 순간 집중되는 경우라면 처리를 위한
버퍼링을 하여 순간적으로 몰리는 것을 처리할 수 있습니다.
이때는 처리를 위한 패킷을 버퍼에 저장하고, 처리를 위한 쓰레드를 따로 돌려
버퍼에 데이터가 있을 경우, 처리를 하도록 합니다.