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
[51750] TServerSocketThread에서 생성된 쓰래드 아이디와 종료시 쓰래드 아이디가 틀릴 경우가 발생합니다. ㅠㅠ
짱구오빠 [saonara] 983 읽음    2007-12-28 11:06
TServerSocketThread 생성과 종료 이벤트 소스입니다.

동시에 여러개의 쓰래드를 처리할 경우
생성이벤트에서 생성된 쓰래드 아이디를 콤보 박스에 저장한 후
종료할때 종료된 쓰래드 아이디를 콤보 박스에서 검색해서 해당 쓰래드 아이디를 삭제하는데요.

처리하다보면 가끔
생성된 쓰래드 아이디와 종료된 쓰래드 아이디가 틀리게 응답될 경우가 있습니다.
즉, 생성할때 쓰래드 아이디가 10이였는데
10번 쓰래드가 종료될때 쓰래드 아이디값이 120 이런식으로 됩니다.

이런 경우는 어떻게 처리해야하나요.

부탁드립니다. ^^;;;;

--------------------------------------------------------------------------------------



//---------------------------------------------------------------------------
//Socket Thread Create Event
//---------------------------------------------------------------------------
void __fastcall Tfkmsmain::AuthServerSocketGetThread(TObject *Sender,
      TServerClientWinSocket *ClientSocket,
      TServerClientThread *&SocketThread)
{
    //TServerClientThread 를 생성
    SocketThread = new TServerSocketThread(false, ClientSocket);

    //Thread Object, Socket handle Insert
    ThreadObjectCombo->Items->AddObject(IntToStr(SocketThread->ThreadID), SocketThread);
}


//---------------------------------------------------------------------------
//Socket Thread End Event
//---------------------------------------------------------------------------
void __fastcall Tfkmsmain::AuthServerSocketThreadEnd(TObject *Sender,
      TServerClientThread *Thread)
{
    //Close Socket Handle Search
    //ListBox2->Items->Add(IntToStr(Thread->ThreadID));
    int nObjectIndex = ThreadObjectCombo->Items->IndexOf(IntToStr(Thread->ThreadID));
    if (nObjectIndex >= 0) ThreadObjectCombo->Items->Delete(nObjectIndex);
    else if (nTerminateStandbyCount > 0) nTerminateStandbyCount--;
    //Invalid Thread ID Terminate Found
    else
    {
        try
        {
        //Execution Thread Terminate
        DWORD dwResult;
        for (int nIndex = 0; nIndex < ThreadObjectCombo->Items->Count; nIndex++)
        {
            Application->ProcessMessages();
            if ((TServerSocketThread*)ThreadObjectCombo->Items->Objects[nIndex] == NULL ||
                    (GetExitCodeThread((void*)(((TServerSocketThread*)ThreadObjectCombo->Items->Objects[nIndex])->Handle), &dwResult) == false &&
                        dwResult != STILL_ACTIVE))
            {
                //Object Delete
                ThreadObjectCombo->Items->Delete(nIndex);
                continue;
            }
        }
        }
        __except(EXCEPTION_EXECUTE_HANDLER)
        {
        }
    }
}

+ -

관련 글 리스트
51750 TServerSocketThread에서 생성된 쓰래드 아이디와 종료시 쓰래드 아이디가 틀릴 경우가 발생합니다. ㅠㅠ 짱구오빠 983 2007/12/28
51754     Re:TServerSocketThread에서 생성된 쓰래드 아이디와 종료시 쓰래드 아이디가 틀릴 경우가 발생합니다. ㅠ 장성호 1187 2007/12/28
51755         감사합니다. ^^ 짱구오빠 1056 2007/12/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.