|
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)
{
}
}
}
|