먼저 읽어 주시어서 감사합니다.
실행프로그램를 돌리는데 어느정도 시간이 지나면 메모리가 찾다는 메세지와 함께 프로그램이 종료되어 버립니다.
서버단인데 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;