Q&A

  • [질문]배치 프로그램을 짜봤는데 에러가 발생하는데 원인을 모르겠네요..
소켓 통신으로 데이타가 초당 2-3건씩 들어옵니다

소스가
  type
    TRecvData = class
      Data1     : String;
      Data2     : String;
      Data3     : String;
      Data4       : String;
    end;

var DataList : TList;

procedure TFormMain.FormShow(Sender: TObject);
begin
     DataList  := TList.Create;
end;

procedure TFormMain.DataReceiveExecute(AThread: TIdPeerThread);
var  vMsg  : TRecvData;
begin

            If DataList.Count < 0 Then Exit
            Else Begin
                vMsg := TRecvData.Create;
                vMsg.Data1     := Data1;
                vMsg.Data2    := Data2;
                vMsg.Data3     := Data3;
                vMsg.Data4    := Data4;

                DataList.Insert(0, vMsg);
End;

procedure TSJCDBThread.Execute;
begin
  //inherited;
    Try
        While Not Terminated Do Begin
            Synchronize(FormMain.DBProcess);
            Sleep(100);
            If Terminated Then Exit;
        End;
    Finally
        Terminate;
    End;
end;


procedure TFormMain.DBProcess;  //수신된 데이타를 DB에 Insert 한다
Var vIdx     : Integer;
    vMsg : TRecvData;
begin

    If DataList.Count < 0 Then Exit;

    For vIdx := DataList.Count - 1 Downto 0 Do Begin

        vMsg := DataList.Items[vIdx];

        ////////////////////// DataBase Insert //////////////////////////
       ////////////////////////////////////////////////////////////////////////////////

        DataList.Delete(vIdx);
        vMsg.Free;
    End;  //for vIdx ~
    
end;


소스가 위와 같이 진행 됩니다
에러가 발생하는데 어디부분이 잘못됐는지 좀 고수님들 봐주세요..
소켓에서 초당 3건 이상 넘어올때 에러가 발생하는거 같습니다.
0  COMMENTS