TAThread에 상태 변수를 하나 만드시는게 어떠신지..
enum TAThreadStatus { EventWating, Running };
void __fastcall TAThread::Execute()
{
TWaitResult Result;
while ( FormMain->bContinue ) {
threadStatus = EventWaiting;
Result = GAEvent->WaitFor(EVENT_WAIT_TIME); // TEvent Object, 1 Second Wait
threadStatus = Running;
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
}
스레드 상태 체크하는 방법이 따로 있었던 것 같습니다.
볼랜드포럼에서 찾아본 기억이 있는데 키워드는 가물가물하네요.
필요하시면 열정을 다해 한번 찾아보심이...
땅주인 님이 쓰신 글 :
:
: 개발환경: 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
: }
: