개발환경: C++ Builder XE5
Thread를 운영하고 있습니다. TEvent를 통해 Main Thread와 Child Thread간 Event를 전달해 주고,
데이터는 Queue를 이용하여 연동하고 있습니다.
Main Thread에서 Queue에 데이터를 넣고, TEvent 객체(GAEvent)에 Signal을 주어 Child Thread가 실행되도록 하였습니다.
그런데, Main Threa에서 Event가 겹칠 경우(즉, Timer와 Socket에서 받은 Event가 거이 동시에 일어나는 경우 등..)
선후를 가려서 나중에 일어나는 Event는 기다리거나 Queue에 넣기만 해야 할 것 같은데,
그래서, Main Thread에서 TEvent로 Signal을 보낼 때 Child Thread 상태를 알았으면 하는데,
즉, TAThread의 상태가 TEvent 객체에서 기다리고 있는 지, 아니면, 다른 Event를 받아 실행 중에 있는 지를
판별하고 싶습니다.
즉, Thread의 상태(동작 중인 지 아니면 TEvent에서 Waiting하고 있는 지를 알 수가 있나요?
void __fastcall TAThread::Execute()
{
TWaitResult Result;
while ( FormMain->bContinue ) {
Result = GAEvent->WaitFor(EVENT_WAIT_TIME); // TEvent Object, 1 Second Wait
if ( Result == wrSignaled || Result == wrTimeout ) {
while ( GAQueu->Count() ) {
GASection->Enter();
pMessage = (STMessage *) GAQueue->Pop(); // TQueue
GASection->Leave();
// do something ..
// it take 2~3 seconds...
delete pMessage;
} // end of while
} else {
// nothing to do..
} // end of if
} // end of while
}
|