C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[21143] ADO로 연결한 Oracle연결객체 포인터를 스레드가 파라미터로 받아서 처리할 경우 그냥 멈쳐버립니다.(스레
초자순이 [] 838 읽음    2002-08-31 09:51
<문제 1>

Form에 있는 x표시를 누를경우 Form은 없어지는데 exe가 죽지 않습니다.

디버깅을 해보니 오라클연결한 객체를 생성하고 그 생성된 객체를 소멸할때 소멸이 되지 않고 그냥 멈춰버립니다. 아무 Error없이...

MDB로 연결한 객체를 소멸할때는 아무문제 없습니다.

오라클이문제입니다.



<문제 2>

2번 스레드에서 파리미터로 받은 오라클연결한 객체 포인터를 사용하여서 Query를 실행하면 잘됩니다.

근데 3번 스레드(여기두 오라클연결한 객체 포인터를 파라미터로 받아서처리)에서 Query실행하려면 Query실행하는 부분에서 그냥 멈쳐버립니다. 아무 Error없이....

2번과 3번스레드는 Query문을 거의 동시에 실행하져...

하나의 스레드가 Query문을 실행하면 다른 스레드에서 Query문을 실행하려고 하면 그냥 멈쳐버리져..

2번 스레드와 3번스레드는 MDB로 연결한 객체 포인터를 받아서 처리하는 루틴도 있습니다. 그런데 MDB사용할때는 어떤 스레드에서 사용하던지 아무문제없이 Query 잘 실행합니다.

근데 오라클이 문제입니다.


전체 소스루틴입니다.

MDB와 Oracle은 ADO로 연결합니다.

Form Create할때
{
    1. ldbm = new TLDBM;  // LocalDB(MDB)연결객체생성

    2. LocalDB연결

    3. pQueueForm = new PACSDB;  // RemoteDB(Oracle)연결객체생성

    4. RemoteDB(Oracle)연결

    5. sQueueForm = new SelectID_ErrChk(ldbm, q_ob); //1번스레드생성
          // LocalDB연결한 객체 포인터(ldbm)를 파라미터로 받아서 처리

    6. T = new Thread_Retrive(0,pQueueForm,ldbm); //2번스레드생성
          // DBServer(오라클)연결한 객체 포인터를 파라미터로 받아서 Query처리
   
    7. T1 = new Thread_Retrive1(1,pQueueForm,ldbm); //3번스레드생성
          // DBServer(오라클)연결한 객체 포인터를 파라미터로 받아서 Query처리

}


//---------------------------------------------------------------------------

FormDestroy할때
{
       if (ldbm) { delete ldbm;  ldbm = NULL; }  // LocalDB연결 객체 소멸;
      
       T->Terminate(); // 2번 스레드죽임
      
       sQueueForm->Terminate(); // 1번 스레드죽임

       T1->Terminate(); //3번 스레드죽임
     
       while (!T->IsTerminated() || !T1-> IsTerminated() || !sQueueForm->IsTerminated()) ; 
             //스레드 죽을때까지 기들림
     
       delete T; //생성된 2번 스레드 소멸

       delete T1; //생성된 3번 스레드 소멸

       delete sQueueForm; //생성된 1번 스레드 소멸

//////////////////////////////////////////////////////////////

       delete pQueueForm; // RemoteDB(Oracle)연결객체소멸 <- 여기서 멈쳐버립니다.

//////////////////////////////////////////////////////////////      

}

+ -

관련 글 리스트
21143 ADO로 연결한 Oracle연결객체 포인터를 스레드가 파라미터로 받아서 처리할 경우 그냥 멈쳐버립니다.(스레 초자순이 838 2002/08/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.