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
[20334] WaitForMultipleObjects()사용시 문제가 있습니다.
초자순이 [] 1134 읽음    2002-07-24 15:00

CRITICAL_SECTION CriticalSection;
HANDLE hThreads[4];


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

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    InitializeCriticalSection(&CriticalSection);

    startflg = 1;
    unsigned a;

    time_t SleepTime, WhatTime;

    W = &ldbm;

    ListBox1->Clear();
    ListBox1->Items->Add("***************   AWSM Start   ***************");

    SleepTime = time(NULL);

    W->INITTLDBM();
    W->LDB_Connect();
    W->Sel_StudyID();

    ListBox1->Items->Add("--- Start Queue Retrieve---");

// Thread를 사용할 경우

    Thread_Retrive *T;
    for (int i=0; i < 4; i++){
    T = new Thread_Retrive(i);
    a = T->Handle;
    hThreads[i] = &a;
   }

    DWORD dwResult = WaitForMultipleObjects(4, hThreads, TRUE, INFINITE);

    if ( WAIT_OBJECT_0 == dwResult )
    {
        // 스레드가 종료되었을경우

        W->LDB_Close();
        W->FINALTLDBM();
    }
    else
    {   //스레드가 종료되지않았을경우
         ListBox1->Items->Add("스레드가 끝나지 않았다");
    }
}


__fastcall Thread_Retrive::Thread_Retrive(int TheNum): TThread(true)
{
FreeOnTerminate = true;
ThreadNum = TheNum;
Resume();
}

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

void __fastcall Thread_Retrive::Execute(void)
{
   p = &q_ob;

   while(p->head)
   {
   EnterCriticalSection(&CriticalSection);
   UpdateThread();
   LeaveCriticalSection(&CriticalSection);
   }
}

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

void __fastcall Thread_Retrive::UpdateThread(void)
{
   AnsiString Study_Num;
   AnsiString aa;

   switch (ThreadNum){
    case 0:
    case 1:
    case 2:
    case 3:
         p = &q_ob;
         aa = ThreadNum;
         Study_Num = p->Retrieve();
         Form1->ListBox1->Items->Add(Study_Num + "Thread Number = " + aa);
         W = &ldbm;
         W->AWSMStart(Study_Num);
         Form1->ListBox1->Items->Add(Study_Num + "Thread Number = " + aa);
         break;
    }//switch
}

void __fastcall TForm1::FormDestroy(TObject *Sender)
{
      DeleteCriticalSection(&CriticalSection);
}

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


이렇게 되는소스가 있는데요.

스레드 돌아가는 부분은 잘 도는데....

WaitForMultipleObjects()함수 쓰는곳이 계속 else로 가네요.

그래서

if ( WAIT_OBJECT_0 == dwResult )
    {
        // 스레드가 종료되었을경우

        W->LDB_Close();
        W->FINALTLDBM();
    }

스레드 Object가 종료되었을경우

이부분을 돌릴려고하는데...

자꾸 else부분으로 가서 안도네요...

DWORD dwResult = WaitForMultipleObjects(4, hThreads, TRUE, INFINITE);

이부분을 잘못쓴건지 아님

써야할 위치가잘못된것인지 모르겠습니다.

답변좀 부탁드립니다.

설명이 넘 장황했나??? --;;

+ -

관련 글 리스트
20334 WaitForMultipleObjects()사용시 문제가 있습니다. 초자순이 1134 2002/07/24
20484     답변주셔서 감사합니다. 초자순이 733 2002/07/29
20356     Re: WaitForMultipleObjects()사용시 문제가 있습니다. 나우시카 1071 2002/07/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.