Q&A

  • Indy소켓에서 Suspend시킨 쓰레드를 다시 Resume하려는데요
안녕하세요....
꼭~좀 도와주세요...ㅡ.ㅜ;;

Client가 메세지를 보내면 일단 서버가 접수후,
메세지를 만들어서, 클라이언트로 보내줍니다...
그리고는 서버는 Suspend 시켜놓구
그 Client가 다시 메세지를 보내면, 해당 쓰레드를 Resume 시켜주고싶은데요

어떻게 그 기존에 쓰레드를 Client가 메세지를 보냈을때 다시 시작할수 있는지요...

Client : 서버에 데이터 요청 (2000 건)
Server : 데이터를 1000건을 보내놓구, Suspend
Client : 1000건을 처리후, 그리고는 메세지를 보내면
Server : Resume 되면서, 다시 Client에게 1000건을 보내줌

어떻게 다시 Resume을 시키죠??

<예>

const SELECT_DONGHO   = 'SD';
const SELECT_BSJG     = 'SB';
const INSERT_CONTENTS = 'IC';
const THREAD_START    = 'TS';


if (strType = SELECT_DONGHO) then begin
          cnt := 0;
          with qrySELECT_DONGHO do begin
               if Active then Close;
               ParamByName('psCD_SITE').AsString := Trim(strData);
               Open;
               First;
               while not EOF do begin
                     strTemp := strTemp + FieldByName('DS_DONG').AsString + '^' +
                                          FieldByName('DS_CUNG').AsString + '^' +
                                          FieldByName('DS_HO'  ).AsString + '^|';
                     cnt := cnt + 1;
                     Next;

                     if (cnt=1000) or (EOF) then
                     begin
                        if EOF then
                            MsgResult := SELECT_DONGHO + #9 + strTemp + '@'
                        else
                            MsgResult := SELECT_DONGHO + #9 + strTemp;

                        pThread.Connection.WriteLn(MsgResult);
                        cnt := 0;
                        strTemp := '';
                         pThread.Suspend;
                     end;
               end;
          end;
1  COMMENTS
  • Profile
    최용일 2003.10.08 23:41
    안녕하세요. 최용일입니다.

    Suspend시키면 더 이상 메세지를 받을 수 없기 때문에 하나의 Connection가지고는 방법이 없을거 같구요... Connection을 하나 더 만들어서 Suspend시킨 쓰레드를 다시 Resume하라고 통지보내는 방식으로 하셔야 할거 같은데...

    제 생각엔 클라이언트가 요청하면 서버가 데이터를 저장해놓고 총 갯수를 클라이언트에 전달해주고, 클라이언트는 이 전달된 갯수를 가지고 몇번째부터 몇번째까지 데이터를 주라고 서버에 요청하는 방식으로 하는게 좋을거 같네요...

    ^^ 항상 즐코하세요...