Q&A

  • 소켓통신의 Synchronize 사용에 관한 질문
다시 질문을 올립니다.




### 작업의 조건

   [ 하나 ]
   클라리언트가 서버에 텍스트 데이타를 송신하고,
   즉시 서버로 부터 자알~ 받았다는  전송확인을 텍스트 데이타로 받음.
  
   [ 둘 ]
   수신 데이타의 특정 위치에서 10 바이트를 읽어와서 3 ~ 5개 디비 테이블을 쿼리하고, 수정하고, 저장 함.
   송/수신 내용을 로그화일로 기록함 (예 : c:\LOG_FILE\20060409.txt)
   송신 데이타를 DB에 저장함.
   수신 데이타를 DB에 저장함.
  
   [ 셋 ]
   위의 작업 '하나' 와 '둘' 은 송/수신된 텍스트의 라인 수 만큼 계속 반복되어 수행 함.
   While EOF(수십건 혹은 수백건) do
   Begin
  
   End;
  
  
  
  
### 질문
   [ 하나 ]  
   위에서 명기한  [둘] 의 작업을 아래의 예와 같이 TClientHandleThread.Execute 의 Synchronize(HandleInput)으로 처리 하는게 올바른 것인지,
        
  
   [ 둘 ]
   아니면 Synchronize와는 전혀 상관이 없이  Send_Message 프로시져를 호출한 다음에 처리를 하는것이 올은 것인지.
  
  
### 여러분의 고견을 기다립니다.
    감사합니다.
  



Procedure Send_Message
begin
   .
   .
   WriteBuffer(aBuffer, SizeOf(aBuffer), TRUE);
   .
   .
   .
end;


procedure TClientHandleThread.Execute;
begin
while not Terminated do
begin
   if not ClientFrmMain.Client.Connected then
   begin
     Terminate;
     ClientFrmMain.Client.Disconnect;
   end
   else
   try
     ClientFrmMain.Client.ReadBuffer(CB, 300);
     Synchronize(HandleInput);
   except
   end;
end;
end;


//=========================================================================
// 서버측으로 부터 들어오는 텍스트 데이타를 로그화일로 기록
// 수신한 텍스트 데이타를 근거로 쿼리, 수정, 저장 닥업등 수행
//=========================================================================
procedure TClientHandleThread.HandleInput;
begin
//  텍스트 데이타  수신 (업무 A 에 해당하는)
if ((Copy(CB.Comm_Message, 20, 4) = '0810') then
begin
    수신 데이타 A 에 대한 로그 작성
    쿼리 작업..
    수정 작업..
    저장 작업..
end;

// 텍스트 데이타  수신 (업무 B 에 해당하는)
if ((Copy(CB.Comm_Message, 20, 4) = '0100') then
begin
    수신 데이타 B 에 대한 로그 작성
    쿼리 작업..
    수정 작업..
    저장 작업..  
end;
end;

//=========================================================================
//서버와 Connect 함.
//=========================================================================
Procedure TClientFrmMain.ClientConnect;
begin
  서버로 연결작업...
End;
0  COMMENTS