Q&A

  • 실행 프로그램이 돌아가는중 어느정도 시간이 지나면 메모리가 찾다는 메세지가..
먼저 읽어 주시어서 감사합니다.

실행프로그램를 돌리는데 어느정도 시간이 지나면 메모리가 찾다는 메세지와 함께 프로그램이 종료되어 버립니다.

서버단인데 Thread 로 Indy 통신과 DB Connect 부터 Query 처리까지 이루어집니다

MemProof 를 돌려보니깐 Thread 가 생성될때 OpenFileMapping(4,0,"SMBuffer") 라는 곳에서 계속 에러가 발생을 합니다.
그런데, 제 코드상에는  OpenFileMapping(4,0,"SMBuffer") 코드가 전혀
존재하지을 않습니다.
어디에서 찾아야할지이...

벌써 일주일째 이문제 때문에 너무 곤란한 지경에 까지 온상황이라서 조금만
이라도 힌트가 되는정보를 주신다면 정말 감사들이겠습니다.

OS 는 WIndow2000 Server 구요, DB 는 Oracle 9.2 버젼에서 돌리고 있습니다.
정말 부탁 들이겠습니다..

혹시나하는 생각에 Thread 생성부분을 올리어봅니다..
잘못된 부분이 아래의

constructor TPDA_INPT.Create( Command : String;
                              var_DataBase : TDataBase;
                              var_Num : integer;
                              var Msg : TBG_Msg;
                              AThread : TIdPeerThread );
begin
  // thread object의 instance를 생성한다
  // Create의 파라미터가 False이면 thread를 생성한후 즉시 Execute를 호출하여 실행한다
  //            "        True이면 Resume을 호출하기 전까지 실행하지 않는다
  inherited Create(True);
  FreeOnTerminate := True;  // 쓰레드가 종료됨과 동시에 메모리에서 객체 해제 설정  

  glb_Command  := Command;
  glb_Msg      := Msg;
  glb_AThread  := AThread;
  glb_Prt_No   := var_Num;

  glb_Session  := TSession.Create(Nil);
  glb_DataBase := TDataBase.Create(Nil);
  glb_Query    := TQuery.Create(Nil);

  glb_Session.SessionName   := Format('AutoPDA%d', [var_Num]);           // 고유한 세션 이름을 설정한다.
  glb_DataBase.SessionName  := glb_Session.SessionName;                  // 데이터베이스를 세션에 연결한다.

  glb_DataBase.DatabaseName := Format('PDA_%d', [var_Num]);              // 고유한 데이터베이스 이름을 설정한다.
  glb_DataBase.LoginPrompt  := False;

  ============================================
  아래의 DataBase 생성에서 에러가 발생합니다.
  에러내용은 OpenFileMapping(4,0,"SMBuffer") 로 나오구요오..

  glb_DataBase.AliasName    := Glb_BDE;
  glb_DataBase.Params.Clear;
  glb_DataBase.Params.Add('USER NAME=' + Glb_DB_UserNm);
  glb_DataBase.Params.Add('PASSWORD=' + Glb_DB_UserPw);
  glb_DataBase.Connected    := True;

  ============================================


  glb_Query.DatabaseName := glb_DataBase.DatabaseName;
  glb_Query.SessionName  := glb_Session.SessionName;

  Resume;
end;

destructor TPDA_INPT.Destroy;
begin
        inherited;
  glb_Session.Free;

  With glb_DataBase Do
  Begin
      Connected := False;
      Close;
//      FreeOnRelease;
      Free;
  End;

  With glb_Query Do
  Begin
      Close;
      Free;
  End;
end;
0  COMMENTS