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
[37818] Re:[질문] 스레드 (CriticalSection)에 관한 질문
김민식 [mspower] 2287 읽음    2004-11-01 16:00
쓰레드 생성자에서  CoInitialize()  를 콜 하시고, 파괴자에서 CoUnInitialize() 를 호출해 주세요.

디자인 시에 디비 컴포넌트 사용시는 호출이 필요 없는데, 쓰레드에서 코드로 사용할때는

위 두개 함수가 필요하더군요...

저도 똑같은 에러로 고생한 적이 있네요..^^


보거스 님이 쓰신 글 :
: 스레드(CriticalSection 알고리즘으로) 를 사용하는데요 아래와 같은 Error Message가 뜨면서 실행이 안되네요.
: Project TEST.exe raised exception class EOleException with message 'CoInitialize가 호출되지 않았습니다',
: Process stopped. Use Step or Run to continue.
: 이게 무슨 말인지 잘 모르겠어요.  어떻게 해야 하는지요?
: ado와 프로시저도 같이 사용됩니다.  db는 SQL 200 Server를 사용합니다.
:
: Object Inspector에서 ado 프로퍼티를 바꿔서 하다보면 (CursorType, Filtered, ParamCheck, Prepared등)
: Error 가 뜨지는 않지만 몇개는 저장이 되고 나머지는 저장이 안되요.
: 디버깅을 하니까 순차적으로 실행이 안되네요.
: 어떤경우는 프로시저를 실행하다가 중간에 빠져버리는 경우도 있고 어떤경우는 프로시저 중간부분으로
: 바로 들어오는 경우도 있고.. 
:
: 아시는분 도움 부탁드립니다.
:
:
: 참고로 제 소스를 올립니다.  (어느분이 올리신 예제 소스를 이용했습니다.)
:
: <h 파일>
: class TScreenThread : public TThread
: {
:   private:
:     int GaugeNum;
:     void __fastcall Execute(void);
:     void __fastcall UpdateThread(void);
:   public :
:     __fastcall TScreenThread(int TheNum);
: };
:
: <cpp 파일>
:
: CRITICAL_SECTION CriticalSection;
:
: <중간생략>
:
: void __fastcall TfrmMain::btnStart(TObject *Sender)
: {
:     TScreenThread *T;
:     for (int i=0; i < 32; i++)
:         T = new TScreenThread(i);
: }
: //---------------------------------------------------------------------------
: __fastcall TScreenThread::TScreenThread(int TheNum): TThread(true)
: {
:     FreeOnTerminate = true;
:     GaugeNum = TheNum;
:     Resume();
: }
: //---------------------------------------------------------------------------
: void __fastcall TScreenThread::Execute(void)
: {
:     while (!Terminated)
:     {
:         EnterCriticalSection(&CriticalSection);  // 이부분에서 아래로 안넘어가는 경우도 있습니다.
:         UpdateThread();
:         LeaveCriticalSection(&CriticalSection);
:     }
: }
: //---------------------------------------------------------------------------
: void __fastcall TScreenThread::UpdateThread(void)
: {
:     frmMain->Procedure_Test(frmMain->N1, frmMain->N2, frmMain->N3);
:     // (N1,N2,N3 는 전역변수로 선언했음.)
: }
: //---------------------------------------------------------------------------
:
: void TfrmMain::Procedure_Test(int n1, int n2, int n3)
: {
:     try
:     {
:         ado->SQL->Clear();
:         ado->SQL->Add("ProcedureTest :n1, :n2, :n3");
:
:         // Object Inspector 에서 ado 프로퍼티를 바꿔서 하면 여기까지 오다가
:         // 빠져 나갈때도 있고 바로 이리로 들어오는 경우도 있구요. 
:
:         ado->Parameters->Items[0]->Name = "n1";
:         ado->Parameters->Items[1]->Name = "n2";
:         ado->Parameters->Items[2]->Name = "n3";
:
:         ado->Parameters->Items[0]->Value = n1;
:         ado->Parameters->Items[1]->Value = n2;
:         ado->Parameters->Items[2]->Value = n3;
:
:         ado->ExecSQL();
:     }
:     catch(const EOleException &E)   
:     {
:         ShowMessage(E.Message);   // 이 부분을 막아도 Error Message 같음.
:     }
:     catch (Exception &exception)
:     {
:     }
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TfrmMain::FormCreate(TObject *Sender)
: {
:     InitializeCriticalSection(&CriticalSection);
: }
: //---------------------------------------------------------------------------
: void __fastcall TfrmMain::FormClose(TObject *Sender, TCloseAction &Action)
: {
:     DeleteCriticalSection(&CriticalSection);   
: }
: //---------------------------------------------------------------------------

+ -

관련 글 리스트
37796 [질문] 스레드 (CriticalSection)에 관한 질문 보거스 1224 2004/10/29
37818     Re:[질문] 스레드 (CriticalSection)에 관한 질문 김민식 2287 2004/11/01
37801     Re:[질문] 스레드 (CriticalSection)에 관한 질문 evergreen 1295 2004/10/29
37802         [감사] 감사합니다. 그리고 한가지만 더요. 보거스 1228 2004/10/29
37803             Re:자체 해결 (맞는건가요?) 보거스 1122 2004/10/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.